您的位置:首页 > 编程语言 > Java开发

[置顶] Rsa 加密解密 java

2017-07-25 21:03 309 查看

前言

RSA公钥加密算法是1977年由罗纳德·李维斯特(Ron Rivest)、阿迪·萨莫尔(Adi Shamir)和伦纳德·阿德曼(Leonard Adleman)一起提出的。1987年7月首次在美国公布,当时他们三人都在麻省理工学院工作实习。RSA就是他们三人姓氏开头字母拼在一起组成的 [ 百度百科 ]

开始

1 .Java中RSA加密解密和.Net 、Php 有点不同,公钥私钥必须使用PKCS8格式,而.Net、Php却不需要。

2 .加密代码如下,注意其中publicCertificate 是PKCS8格式:

@Override
public String rsaEncode(String publicCertificate, String text) {
try {
byte[] publicBytes =baseStrToByte(publicCertificate);
X509EncodedKeySpec keySpec = new X509EncodedKeySpec(publicBytes);
KeyFactory keyFactory = KeyFactory.getInstance(ALGORITHM);
PublicKey pubKey = keyFactory.generatePublic(keySpec);
try {
// get an RSA cipher object and print the provider
final Cipher cipher = Cipher.getInstance(ALGORITHM);
// encrypt the plain text using the public key
cipher.init(Cipher.ENCRYPT_MODE, pubKey);
byte[] cipherBytes = cipher.doFinal(text.getBytes(CharSet));
String encodestr = baseByteToStr(cipherBytes);
return encodestr;

} catch (Exception e) {
e.printStackTrace();
}
} catch (Exception e) {
e.printStackTrace();
}
return null;
}


3 .解密代码,注意其中privateCertificate是PKCS8格式

@Override
public String rsaDecode(String privateCertificate, String text) {
try {
byte[] privateBytes = baseStrToByte(privateCertificate);
PKCS8EncodedKeySpec keySpec = new PKCS8EncodedKeySpec(privateBytes);
KeyFactory keyFactory = KeyFactory.getInstance(ALGORITHM);
PrivateKey priKey = keyFactory.generatePrivate(keySpec);
byte[] cipherText = null;
try {
// get an RSA cipher object and print the provider
final Cipher cipher = Cipher.getInstance(ALGORITHM);
// encrypt the plain text using the public key
cipher.init(Cipher.DECRYPT_MODE, priKey);
byte[] textbyte = baseStrToByte(text);
cipherText = cipher.doFinal(textbyte);
String decodestr = new String(cipherText, CharSet);
return decodestr;

} catch (Exception e) {
e.printStackTrace();
}
} catch (Exception e) {
e.printStackTrace();
}
return null;
}


4 .辅助方法

/**
* @Description (TODO)
* @param str
* @return
*/
private byte[] baseStrToByte(String str) {
return Base64.getDecoder().decode(str);
}

/**
* @Description (TODO)
* @param bytes
* @return
*/
private String baseByteToStr(byte[] bytes) {
return Base64.getEncoder().encodeToString(bytes);
}


结束

附上单元测试图片一张:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: