private static final String KEY_ALGORITHM = "RSA";
private static final String PUBLIC_KEY ="publicKey";
private static final String PRIVATE_KEY ="privateKey";
public static void main(String[] args) throws Exception{
Map<String,String> keyMap = genKey();
RSAPublicKey publicKey = getPublicKey(keyMap.get(PUBLIC_KEY));
RSAPrivateKey privateKey = getPrivateKey(keyMap.get(PRIVATE_KEY));
String info ="明文123456";
//加密
byte[] bytes = encrypt(info.getBytes("utf-8"),publicKey);
//解密
bytes = decrypt(bytes, privateKey);
System.out.println(new String(bytes,"utf-8"));
}
public static Map<String,String> genKey() throws NoSuchAlgorithmException{
Map<String,String> keyMap = new HashMap<String,String>();
KeyPairGenerator keygen = KeyPairGenerator.getInstance(KEY_ALGORITHM);
SecureRandom random = new SecureRandom();
// random.setSeed(keyInfo.getBytes());
// 初始加密,512位已被破解,用1024位,最好用2048位
keygen.initialize(1024, random);
// 取得密钥对
KeyPair kp = keygen.generateKeyPair();
RSAPrivateKey privateKey = (RSAPrivateKey)kp.getPrivate();
String privateKeyString = Base64.encode(privateKey.getEncoded());
RSAPublicKey publicKey = (RSAPublicKey)kp.getPublic();
String publicKeyString = Base64.encode(publicKey.getEncoded());
keyMap.put(PUBLIC_KEY, publicKeyString);
keyMap.put(PRIVATE_KEY, privateKeyString);
return keyMap;
}
public static RSAPublicKey getPublicKey(String publicKey) throws Exception{
byte[] keyBytes = LBase64.decode(publicKey);
X509EncodedKeySpec spec = new X509EncodedKeySpec(keyBytes);
KeyFactory keyFactory = KeyFactory.getInstance(KEY_ALGORITHM);
return (RSAPublicKey) keyFactory.generatePublic(spec);
}
public static RSAPrivateKey getPrivateKey(String privateKey) throws Exception{
byte[] keyBytes = LBase64.decode(privateKey);
PKCS8EncodedKeySpec spec = new PKCS8EncodedKeySpec(keyBytes);
KeyFactory keyFactory = KeyFactory.getInstance(KEY_ALGORITHM);
return (RSAPrivateKey) keyFactory.generatePrivate(spec);
}
分享到:
相关推荐
PKCS#8是一种公钥加密标准,全称为“Public-Key Cryptography Standards #8”,由RSA Security提出,主要用于存储和交换加密私钥。在C#环境中,处理PKCS#8格式的密钥可以用于实现与Java平台的互操作性,因为Java广泛...
在跨语言通信中,如C#与Java之间,为了保证公钥和私钥的兼容性,我们需要遵循相同的密钥格式标准,如X.509或PKCS#8。C#中的`RSACryptoServiceProvider`可以通过`ExportCspBlob(true/false)`导出和导入密钥,而Java...
在Java中,我们可以使用Java Cryptography Extension (JCE) 库来生成和操作RSA密钥对,包括公钥和私钥。 生成RSA公钥和私钥的基本步骤如下: 1. **创建KeyPairGenerator对象**:首先,我们需要创建一个...
RSA是一种非对称加密算法,它基于两个不同的密钥:公钥和私钥。公钥用于加密,而私钥用于解密。这种机制使得只有持有私钥的一方才能解密由公钥加密的数据,从而确保数据的安全性。 首先,要生成RSA密钥对,可以使用...
首先,我们需要生成一对公钥和私钥,这通常通过`KeyPairGenerator`类来完成。以下是一段创建RSA密钥对的示例代码: ```java KeyPairGenerator keyGen = KeyPairGenerator.getInstance("RSA"); keyGen.initialize...
PKCS8EncodedKeySpec pkcs8EncodedKeySpec = new PKCS8EncodedKeySpec(rsaPrivateKey.getEncoded()); KeyFactory keyFactory = KeyFactory.getInstance("RSA"); PrivateKey privateKey = keyFactory....
在Java端,你可以使用`java.security.KeyFactory`和`java.security.spec.PKCS8EncodedKeySpec`(对于私钥)或`java.security.spec.X509EncodedKeySpec`(对于公钥)来导入这些PEM字符串。 总结一下,C#中处理RSA...
RSA是一种非对称加密算法,它使用一对密钥,即公钥和私钥,来进行加密和解密操作。 首先,了解什么是RSA加密。RSA算法由Ron Rivest、Adi Shamir和Leonard Adleman在1977年提出,它的核心在于两个大质数的乘积和它们...
- 将密钥转换为字符串格式,以便于存储和传输,可以使用`X509EncodedKeySpec`和`PKCS8EncodedKeySpec`,配合`KeyFactory`进行编码和解码。 3. **加密**: - 使用`Cipher`类的`getInstance("RSA/ECB/PKCS1Padding...
我们可以使用`java.security.KeyFactory`和`java.security.spec.X509EncodedKeySpec/PKCS8EncodedKeySpec`将密钥转换为Base64编码的字符串。 3. **加密过程**:使用公钥进行加密。获取公钥后,使用`Cipher`类的`...
例如,使用Forge库,可以生成公钥和私钥,然后用公钥加密数据,代码示例如下: ```javascript var forge = require('forge'); var pki = forge.pki; var rsa = forge.rsa; // 生成RSA key pair var keys = pki.rsa...
1. **构建密钥对**:甲方生成一对密钥——公钥和私钥,并将公钥公开给乙方,而私钥则需妥善保管。 2. **数据加密与签名**:甲方使用私钥对数据进行加密,并对加密后的数据进行签名,然后将签名和加密的数据一起发送...
对于私钥,可以使用`PKCS8EncodedKeySpec`和`PrivateKeyFactory`。 5. **源代码结构**:提供的Java版RSA公钥加密源代码可能包含以下部分: - 密钥对生成:包括密钥长度设定、KeyPairGenerator的使用。 - 加密:...
X509EncodedKeySpec x509EncodedKeySpec = new X509EncodedKeySpec(publicKey.getEncoded()); KeyFactory publicKeyFactory = KeyFactory.getInstance("RSA"); PublicKey pubKey = publicKeyFactory.generatePublic...
RSA算法是一种非对称加密算法,它基于两个不同的密钥:公钥和私钥。在本文中,我们将深入探讨如何在前端使用JavaScript进行RSA加密,以及如何在后端使用Java进行解密。同时,我们还会提及如何在会话(Session)中...
PKCS8EncodedKeySpec privKeySpec = new PKCS8EncodedKeySpec(Base64.decodeBase64(pemKey.getBytes())); PrivateKey privateKey = keyFactory.generatePrivate(privKeySpec); in = new BufferedReader(new ...
使用生成的公钥和私钥进行加密和解密操作: ```java Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding"); // 使用RSA算法,ECB模式,PKCS1填充 // 加密 cipher.init(Cipher.ENCRYPT_MODE, publicKey); ...
这段代码首先获取了RSA密钥生成器,然后初始化为2048位长度(为了安全性,通常选择较长的密钥长度),最后生成并分离出公钥和私钥。 接下来,我们可以使用公钥对数据进行加密,私钥进行解密。例如: ```java ...
该算法包含两个密钥:公钥和私钥。公钥可以公开,用于加密数据;而私钥必须保密,用于解密数据。由于加密和解密使用的是不同的密钥,因此非对称加密提供了比对称加密更高的安全性。 **JavaScript客户端RSA加密** 在...
密钥生成是指生成公钥和私钥的过程,公钥用于加密,私钥用于解密。加密是指使用公钥对数据进行加密的过程,解密是指使用私钥对加密数据进行解密的过程。 Java实现RSA算法的方法主要包括以下步骤: 1. 密钥生成:...