/**
* 通过指定的密钥长度生成非对称的密钥对
* @param keySize 推荐使用1024,2048 ,不允许低于1024
* @return
*/
public static KeyPair generateRSAKeyPair(int keySize){
KeyPair ret = null;
try {
//1、准备生成
KeyPairGenerator generator = KeyPairGenerator.getInstance("RSA");
//2、初始化,设置秘钥长度
generator.initialize(keySize);
//3、生成,并且返回
ret = generator.generateKeyPair();
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}
return ret;
}
KeyPair keyPair = EncryptUtil.generateRSAKeyPair(1024); //获取公钥,可以给任何人 PublicKey publicKey = keyPair.getPublic(); //获取私钥 PrivateKey privateKey = keyPair.getPrivate();
/**
* RSA 加密
* @param data 需要加密的数据
* @param key 可以是 PublicKey,也可以是PrivateKey
* @return
*/
public static byte[] rsaEncrypt(byte[] data ,Key key){
byte[] ret = null;
if (data != null
&& data.length>0
&& key!=null) {
// 1、创建Cipher 使用RSA
try {
Cipher cipher = Cipher.getInstance("RSA");
//设置Key
cipher.init(Cipher.ENCRYPT_MODE,key);
ret = cipher.doFinal(data);
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
} catch (NoSuchPaddingException e) {
e.printStackTrace();
} catch (InvalidKeyException e) {
e.printStackTrace();
} catch (BadPaddingException e) {
e.printStackTrace();
} catch (IllegalBlockSizeException e) {
e.printStackTrace();
}
}
return ret;
}
/**
* RSA 解密
* @param data 要解密的数据
* @param key 可以是 PublicKey,也可以是PrivateKey
* @return
*/
public static byte[] rsaDecrypt(byte[] data ,Key key){
byte[] ret = null;
if (data != null
&& data.length>0
&& key!=null) {
// 1、创建Cipher 使用RSA
try {
Cipher cipher = Cipher.getInstance("RSA");
//设置Key
cipher.init(Cipher.DECRYPT_MODE,key);
ret = cipher.doFinal(data);
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
} catch (NoSuchPaddingException e) {
e.printStackTrace();
} catch (InvalidKeyException e) {
e.printStackTrace();
} catch (BadPaddingException e) {
e.printStackTrace();
} catch (IllegalBlockSizeException e) {
e.printStackTrace();
}
}
return ret;
}
//获得公钥 私钥 PrivateKey privateKey = keyPair.getPrivate(); PublicKey publicKey = keyPair.getPublic(); //编码将PublicKey和PrivateKey对象转换为字节数组,该字节数组为公钥、私钥的实际数据 byte[] publicKeyEncoded = publicKey.getEncoded(); byte[] privateKeyEncoded = privateKey.getEncoded(); //将字节数组通过Base64编码算法 编码成可见的字符形式 String publickey = Base64.encodeToString(publicKeyEncoded, Base64.NO_WRAP); String privatekey = Base64.encodeToString(privateKeyEncoded, Base64.NO_WRAP); //进行存储操作 。。。。
//获取公钥
//str_publickey 为公钥字符串形式数据(公钥先编码成byte[] 在 形成字符串)
//解码
byte[] publicdecode = Base64.decode(new String(str_publickey), Base64.NO_WRAP);
//构造X509EncodedKeySpec对象
X509EncodedKeySpec publicKeySpec = new X509EncodedKeySpec(publicdecode);
//指定加密算法
KeyFactory keyFactory = KeyFactory.getInstance("RSA");
//取得公钥
PublicKey publicKey = keyFactory.generatePublic(publicKeySpec);
//解码
//获取私钥
//str_private 为私钥字符串形式的数据
byte[] privatedecode = Base64.decode(new String(str_private), Base64.NO_WRAP);
//构造X509EncodedKeySpec对象
PKCS8EncodedKeySpec privateKeySpec = new PKCS8EncodedKeySpec(privatedecode);
//指定加密算法
keyFactory = KeyFactory.getInstance("RSA");
//取得私钥
PrivateKey privateKey = keyFactory.generatePrivate(privateKeySpec);
机械节能产品生产企业官网模板...
大气智能家居家具装修装饰类企业通用网站模板...
礼品公司网站模板
宽屏简约大气婚纱摄影影楼模板...
蓝白WAP手机综合医院类整站源码(独立后台)...苏ICP备2024110244号-2 苏公网安备32050702011978号 增值电信业务经营许可证编号:苏B2-20251499 | Copyright 2018 - 2025 源码网商城 (www.ymwmall.com) 版权所有