Java实现RSA⾮对称加密算法加解密和签名验签
Java 实现 RSA ⾮对称加密算法
前⾔
⽂章字数⽐较多,可直接查看代码:,⽂中描述有误的地⽅欢迎各位⼤神指导。
⼀、⾮对称加密算法简介
⾮对称加密算法⼜称现代加密算法,是计算机通信安全的基⽯,保证了加密数据不会被破解。与对称加密算法不同,⾮对称加密算法需要两个密钥:公开密钥(publickey)和私有密(privatekey),因为加密和解密使⽤的是两个不同的密钥,所以这种算法叫作⾮对称加密算法。公钥和私钥是⼀对,如果⽤公钥对数据进⾏加密,只有⽤对应的私钥才能解密。常见算法:RSA、ECC。
加解密和签名验签区别:
既然是加密,那肯定是不希望别⼈知道我的消息,所以只有我才能解密,所以可得出公钥负责加密,私钥负责解密;同理既然是签名,那肯定是不希望有⼈冒充我发消息,只有我才能发布这个签名,所以可得出私钥负责签名,公钥负责验证。
注意: 公钥加密、私钥解密,私钥签名、公钥验签。
⼆、RSA 加解密代码实例
1.⽣成 RSA 密钥
代码如下:
public static KeyPair generateKeyPair(int keysize){
try{
// 获取指定算法的密钥对⽣成器(RSA)
KeyPairGenerator generator = Instance(RSA_ALGORITHM);
// 初始化密钥对⽣成器(指定密钥长度, 使⽤默认的安全随机数源)
generator.initialize(keysize);
// 随机⽣成⼀对密钥(包含公钥和私钥)
ateKeyPair();
}catch(Exception e){
e.printStackTrace();
}
return null;java源代码加密
}
2.RSA 加解密
代码如下:
/**
* RSA 加密
*
* @param publicKeyBytes 公钥
* @param plain 原⽂
* @return 密⽂
*/
public static byte[]rsaEncrypt(byte[] publicKeyBytes,byte[] plain){
try{
// RSA
KeyFactory keyFactory = Instance(RSA_ALGORITHM);
X509EncodedKeySpec pubX509 =new X509EncodedKeySpec(publicKeyBytes);
PublicKey publicKey = atePublic(pubX509);
Cipher cipher = Algorithm());
cipher.init(Cipher.ENCRYPT_MODE, publicKey);
return cipher.doFinal(plain);
}catch(Exception e){
e.printStackTrace();
}
return null;
}
/**
* RSA 解密
*
* @param privateKeyBytes 私钥
* @param encrypted 密⽂
* @return 原⽂
*/
public static byte[]rsaDecrypt(byte[] privateKeyBytes,byte[] encrypted){
try{
// RSA
KeyFactory keyFactory = Instance(RSA_ALGORITHM);
PKCS8EncodedKeySpec pkcs8KeySpec =new PKCS8EncodedKeySpec(privateKeyBytes); PrivateKey privateKey = atePrivate(pkcs8KeySpec);
Cipher cipher = Algorithm());
cipher.init(Cipher.DECRYPT_MODE, privateKey);
return cipher.doFinal(encrypted);
}catch(Exception e){
e.printStackTrace();
}
return null;
}
3.测试代码
代码如下:
public static void main(String[] args){
String plain ="123";
KeyPair keyPair =generateKeyPair(2048);
byte[] encrypt =Public().getEncoded(), Bytes());
byte[] decrypt =Private().getEncoded(), encrypt);
}
三、RSA 签名验签代码实例
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论