java rsa公钥加密

作者:原创时间:2022-04-19
文档

   

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;
 
}
 
}
 
}

以上就是小编今天的分享了,希望可以帮助到大家。

显示全文
java rsa私钥加密 java rtp java runnable java runtime.exec java rxjava java sandbox java script java selector java selenium java semaphore java separator java sequence java serializable java serializable接口 java serialversionuid java setlayout java platform java settimeout java plug-in java sftp java pipeline java ping java phoenix java paypal java path java rsa加密 java rotate java reverse java reverse() java retrofit java resume java resultset java result java rest java requests java partial java request java parser java repeat java parse