Java-参数RSA加密解密
RSA加密和解密是一种常用的非对称加密算法,通过使用公钥进行加密,使用私钥进行解密。
RSA加密过程如下:
- 选择两个不同的质数p和q,计算它们的乘积n=pq,同时计算φ(n)=(p-1)(q-1)。
- 选择一个与φ(n)互质的正整数e,1<e<φ(n),称为公钥。
- 计算e的模反元素d,使得e*d ≡ 1 mod φ(n),称为私钥。
- 将明文M转换成整数m,满足0≤m<n。
- 使用公钥(e,n)进行加密,计算密文C = m^e mod n。
- 将密文C发送给接收方。
RSA解密过程如下:
- 接收到密文C。
- 使用私钥(d,n)进行解密,计算明文M = C^d mod n。
- 将整数m转换成明文M。
需要注意的是,RSA算法要求使用的质数p和q足够大,并且要保证e与φ(n)互质,以确保加密的安全性。
//公钥
@Value("${wx.publicKey}")
private String publicKey;
//私钥
@Value("${wx.privateKey}")
private String privateKey;
public static final String TYPE = "2";
public String plaintextCipher(String req,String type) {
if (type == null || type.trim().length() == 0){
type = "1";
}
RSA rsa = new RSA(AsymmetricAlgorithm.RSA_ECB_PKCS1.getValue(), privateKey, publicKey);
String result = "";
if("1".equals(type)){
//加密
try{
byte[] bytes = rsa.encrypt(req, KeyType.PublicKey);
result = new String(Base64.encodeBase64(bytes));
} catch (Exception e) {
System.out.println("数据错误,请重新尝试。");
}
System.out.println("result="+result);
}else{
//解析
String decryptByPrivate = "";
try{
decryptByPrivate = rsa.decryptStr(req, KeyType.PrivateKey);
} catch (Exception e) {
System.out.println("数据错误,请重新尝试。");
}
result = decryptByPrivate;
System.out.println("result="+result);
}
return result;
}