最近做小程序用户ID验证的问题,文明传递有风险,所以想加密再传送用户ID,找了些加密的方法,
最开始想用MD5加密,以前有过这样的加密方式,现在换一种RES方式 对应的一组公钥和私钥加密方式,
/**
* @author lmc
* @version date:2018年9月27日 上午11:08:27
*/
package com.yitai.tms.weixin.rsa;
import java.math.BigInteger;
import java.security.KeyFactory;
import java.security.KeyPair;
import java.security.KeyPairGenerator;
import java.security.PrivateKey;
import java.security.PublicKey;
import java.security.interfaces.RSAPrivateKey;
import java.security.interfaces.RSAPublicKey;
import java.security.spec.PKCS8EncodedKeySpec;
import java.security.spec.X509EncodedKeySpec;
import javax.crypto.Cipher;
import org.apache.commons.codec.binary.Hex;
/**
* @author lmc
* @Email huyang@126.com
* @date 2018年9月27日
*/
public class RSAwechat {
private RSAPublicKey rsaPublicKey;
private RSAPrivateKey rsaPrivateKey;
public String encode(String src)
{
try
{
//初始化密钥
KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("RSA");
keyPairGenerator.initialize(512);
KeyPair keyPair = keyPairGenerator.generateKeyPair();
rsaPublicKey = (RSAPublicKey)keyPair.getPublic();
rsaPrivateKey = (RSAPrivateKey)keyPair.getPrivate();
//私钥加密 公钥解密
PKCS8EncodedKeySpec pkcs8EncodedKeySpec
= new PKCS8EncodedKeySpec(rsaPrivateKey.getEncoded());
KeyFactory keyFactory = KeyFactory.getInstance("RSA");
PrivateKey privateKey = keyFactory.generatePrivate(pkcs8EncodedKeySpec);
Cipher cipher = Cipher.getInstance("RSA");
cipher.init(Cipher.ENCRYPT_MODE, privateKey);
byte[] resultBytes = cipher.doFinal(src.getBytes());
//私钥解密 公钥加密
// X509EncodedKeySpec x509EncodedKeySpec =
// new X509EncodedKeySpec(rsaPublicKey.getEncoded());
// KeyFactory keyFactory = KeyFactory.getInstance("RSA");
// PublicKey publicKey = keyFactory.generatePublic(x509EncodedKeySpec);
// Cipher cipher = Cipher.getInstance("RSA");
// cipher.init(Cipher.ENCRYPT_MODE, publicKey);
// byte[] resultBytes = cipher.doFinal(src.getBytes());
return Hex.encodeHexString(resultBytes);
}
catch(Exception e)
{
e.printStackTrace();
}
return null;
}
public String decode(String src)
{
try
{
//私钥加密 公钥解密
X509EncodedKeySpec x509EncodedKeySpec =
new X509EncodedKeySpec(rsaPublicKey.getEncoded());
KeyFactory keyFactory = KeyFactory.getInstance("RSA");
PublicKey publicKey = keyFactory.generatePublic(x509EncodedKeySpec);
Cipher cipher = Cipher.getInstance("RSA");
cipher.init(Cipher.DECRYPT_MODE, publicKey);
byte[] resultBytes = cipher.doFinal(Hex.decodeHex(src.toCharArray()));
//私钥解密 公钥加密
// PKCS8EncodedKeySpec pkcs8EncodedKeySpec
// = new PKCS8EncodedKeySpec(rsaPrivateKey.getEncoded());
// KeyFactory keyFactory = KeyFactory.getInstance("RSA");
// PrivateKey privateKey = keyFactory.generatePrivate(pkcs8EncodedKeySpec);
// Cipher cipher = Cipher.getInstance("RSA");
// cipher.init(Cipher.DECRYPT_MODE, privateKey);
// byte[] resultBytes = cipher.doFinal(Hex.decodeHex(src.toCharArray()));
return new String(resultBytes);
}
catch(Exception e)
{
e.printStackTrace();
}
return null;
}
}
加密方式
/**
* @author lmc
* @version date:2018年9月27日 上午11:11:11
*/
package com.yitai.tms.weixin.rsa;
/**
* @author lmc
* @Email huyang@126.com
* @date 2018年9月27日
*/
public class RSAtool {
private static RSAwechat rsa=new RSAwechat();
public static String encRSAwechat(String token){
return rsa.encode(token);
}
public static String decRSAwechat(String token){
return rsa.decode(token);
}
public static void main(String args[])
{
System.out.println(RSAtool.encRSAwechat("asdfasdfasdfa"));
String str = RSAtool.encRSAwechat("asdfasdfasdfa");
System.out.println(RSAtool.decRSAwechat(str));
}
}