java rsa公钥加密是什么?让我们一起来了解一下吧!
java rsa公钥加密是一种加密技术。秘钥是指数字或者字符串,在加/解密的时候传递加/解密算法。公钥的密码体制有三个内容,分别是公钥、私钥与加/解密算法。
一般我们采用的公钥加密算法有以下几种:
1. RSA加密算法:以数论的欧拉定理为基础,是第一个兼有安全性与实用性的公钥加密算法,已经变成了国际标准。
2. ELGAMAL加密算法:在有限域上离散对数的基础上的公钥加密体制,它的作用是加密,也有数字签名的功能。
实战演练,具体步骤如下:
public class KeyGenerater {undefined
private byte[] priKey;
private byte[] pubKey;
public void generater() {undefined
try {undefined
java.security.KeyPairGenerator keygen = java.security.KeyPairGenerator
.getInstance("RSA");
SecureRandom secrand = new SecureRandom();
secrand.setSeed("syj".getBytes()); // 初始化随机产生器
keygen.initialize(1024, secrand);
KeyPair keys = keygen.genKeyPair();
PublicKey pubkey = keys.getPublic();
PrivateKey prikey = keys.getPrivate();
pubKey = Base64.encodeToByte(pubkey.getEncoded());
priKey = Base64.encodeToByte(prikey.getEncoded());
System.out.println("pubKey = " + new String(pubKey));
System.out.println("priKey = " + new String(priKey));
} catch (java.lang.Exception e) {undefined
System.out.println("生成密钥对失败");
e.printStackTrace();
}
}
public byte[] getPriKey() {undefined
return priKey;
}
public byte[] getPubKey() {undefined
return pubKey;
}
}
public class Signaturer {undefined
/**
*
* Description:数字签名
*
*/
public static byte[] sign(byte[] priKeyText, String plainText) {undefined
try {undefined
PKCS8EncodedKeySpec priPKCS8 = new PKCS8EncodedKeySpec(Base64
.decode(priKeyText));
KeyFactory keyf = KeyFactory.getInstance("RSA");
PrivateKey prikey = keyf.generatePrivate(priPKCS8);
// 用私钥对信息生成数字签名
java.security.Signature signet = java.security.Signature
.getInstance("MD5withRSA");
signet.initSign(prikey);
signet.update(plainText.getBytes());
byte[] signed = Base64.encodeToByte(signet.sign());
return signed;
} catch (java.lang.Exception e) {undefined
System.out.println("签名失败");
e.printStackTrace();
}
return null;
}
}
public class SignProvider {undefined
private SignProvider() {undefined
}
/**
*
* Description:校验数字签名,此方法不会抛出任务异常,成功返回true,失败返回false,要求全部参数不能为空
*
* @param pubKeyText
* 公钥,base64编码
* @param plainText
* 明文
* @param signTest
* 数字签名的密文,base64编码
* @return 校验成功返回true 失败返回false
*/
public static boolean verify(byte[] pubKeyText, String plainText,
byte[] signText) {undefined
try {undefined
// 解密由base64编码的公钥,并构造X509EncodedKeySpec对象
java.security.spec.X509EncodedKeySpec bobPubKeySpec = new java.security.spec.X509EncodedKeySpec(
Base64.decode(pubKeyText));
// RSA对称加密算法
java.security.KeyFactory keyFactory = java.security.KeyFactory
.getInstance("RSA");
// 取公钥匙对象
java.security.PublicKey pubKey = keyFactory
.generatePublic(bobPubKeySpec);
// 解密由base64编码的数字签名
byte[] signed = Base64.decode(signText);
java.security.Signature signatureChecker = java.security.Signature
.getInstance("MD5withRSA");
signatureChecker.initVerify(pubKey);
signatureChecker.update(plainText.getBytes());
// 验证签名是否正常
if (signatureChecker.verify(signed))
return true;
else
return false;
} catch (Throwable e) {undefined
System.out.println("校验签名失败");
e.printStackTrace();
return false;
}
}
}以上就是小编今天的分享了,希望可以帮助到大家。