/**
* 参考资料 https://www.zhihu.com/question/25912483 http://blog.csdn.net/lemon_tree12138/article/details/50696926
*/
public class RSAUtil {
public static final String src = "rsa test";
// public static String publicKey = "MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBALA/5kGPIwmQQNXHzrdDLVGQhHhlqelZbW5DbzmT4yLfmhQjEINlonh+trz6LqVr+032AnXYaW2sKFja6tPvQtECAwEAAQ==";
// public static String privateKey = "MIIBVAIBADANBgkqhkiG9w0BAQEFAASCAT4wggE6AgEAAkEAsD/mQY8jCZBA1cfOt0MtUZCEeGWp6VltbkNvOZPjIt+aFCMQg2WieH62vPoupWv7TfYCddhpbawoWNrq0+9C0QIDAQABAkAL9kpKaMyX+ZJs8AK3rXeF8akMAtplXAxxT2JdJgxkcWt5upAVJkf2S/Ijy8V+Tq4geP1N4FJxki+k9d6r4doBAiEA9xfoxBGBECR1mEuDwYasgjkXiQ3eh/CNkfaX7Fv8MGUCIQC2mkTIxyq5M5Saxk1fpd/ojgNvzWhdskNaHczqG9VD/QIgHW1WhktDYKXG731G0rx0PQoJmIPzVaM7aP/CNh76WNUCIQCDsTTEXKeaU/HrwfKRdc7LKIif/FM1p9fdSTq86H/hfQIgWFLfd4bceBwlsqYNrbnN/l5BQd+uZK+pPPfeoZ4Xf7o=";
public static String publicKey ="MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAJSBwJz2g7bGNak+6CctrWjMtZ6c/F3yCnTQD8lWfJdl39CrwTwOzE6tEG7b4/8m7b9NrnHYSg8NMJarAqUnVLECAwEAAQ==";
public static String privateKey ="MIIBVQIBADANBgkqhkiG9w0BAQEFAASCAT8wggE7AgEAAkEAlIHAnPaDtsY1qT7oJy2taMy1npz8XfIKdNAPyVZ8l2Xf0KvBPA7MTq0Qbtvj/ybtv02ucdhKDw0wlqsCpSdUsQIDAQABAkBPAQwoNNjzdlT72dSFaz5yn10LqbZ0gBxh8oJDeThFDgQolm2sRVXvz+v2epEOl/YzVBj0LpY8qMnWstY2Y1RBAiEA1AVlFzBCsotSWHHZqNb/LTD325G8gYgOgmj8eOWoVNkCIQCzT6qQ2xYa8bWT6UDSp9uWvNsXCOhNHGjMp26TyKI3mQIgMYKxAKE8cgUmzZCIi2zpWdw9hQCbTIRBHyL1EiZPEMECIQCYglDjZcQWZLD4vfJpeWWWfsilfej+9QPZ1SqCvanjOQIhANF3yQvi6kaXYWcbbiMie7jhoRwd5A5WnMF0bHc0hCbt";
public static void main(String[] args) {
// jdkRSA();
String s = publicKeyEncodeRSA("123456");
System.out.println(s);
String r = privateKeyDecodeRSA(s);
System.out.println(r);
}
/**
* 公钥加密
* @param str
* @return
*/
public static String publicKeyEncodeRSA(String str) {
byte[] result = {};
try {
byte[] key = Base64.decodeBase64(publicKey);
X509EncodedKeySpec x509EncodedKeySpec = new X509EncodedKeySpec(key);
KeyFactory keyFactory = KeyFactory.getInstance("RSA");
PublicKey publicKey = keyFactory.generatePublic(x509EncodedKeySpec);
Cipher cipher = Cipher.getInstance("RSA");
cipher.init(Cipher.ENCRYPT_MODE, publicKey);
result = cipher.doFinal(str.getBytes());
} catch (Exception e) {
// TODO: handle exception
//Logger.getLogger(RSAUtil.class).error("error", e);
}
return Base64.encodeBase64String(result);
}
/**
* 私钥解密
* @param str
* @return
*/
public static String privateKeyDecodeRSA(String str) {
byte[] result = {};
try {
byte[] key = Base64.decodeBase64(privateKey);
byte[] rsaStr = Base64.decodeBase64(str);
PKCS8EncodedKeySpec pkcs8EncodedKeySpec = new PKCS8EncodedKeySpec(key);
KeyFactory keyFactory = KeyFactory.getInstance("RSA");
PrivateKey privateKey = keyFactory.generatePrivate(pkcs8EncodedKeySpec);
Cipher cipher = Cipher.getInstance("RSA");
cipher.init(Cipher.DECRYPT_MODE, privateKey);
result = cipher.doFinal(rsaStr);
} catch (Exception e) {
// TODO: handle exception
//Logger.getLogger(RSAUtil.class).error("error", e);
}
return new String(result);
}
public static String getToken(String username, String password) {
return Base64Util.getBase64Str(username + ":" + password, "encode");
}
/**
* jdk实现:
*/
public static void jdkRSA() {
try {
// 1.初始化发送方密钥
KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("RSA");
keyPairGenerator.initialize(512);
KeyPair keyPair = keyPairGenerator.generateKeyPair();
RSAPublicKey rsaPublicKey = (RSAPublicKey) keyPair.getPublic();
RSAPrivateKey rsaPrivateKey = (RSAPrivateKey) keyPair.getPrivate();
System.out.println("Public Key:" + Base64.encodeBase64String(rsaPublicKey.getEncoded()));
System.out.println("Private Key:" + Base64.encodeBase64String(rsaPrivateKey.getEncoded()));
// 2.私钥加密、公钥解密 ---- 加密
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[] result = cipher.doFinal(src.getBytes());
System.out.println("私钥加密、公钥解密 ---- 加密:" + Base64.encodeBase64String(result));
// 3.私钥加密、公钥解密 ---- 解密
X509EncodedKeySpec x509EncodedKeySpec = new X509EncodedKeySpec(rsaPublicKey.getEncoded());
keyFactory = KeyFactory.getInstance("RSA");
PublicKey publicKey = keyFactory.generatePublic(x509EncodedKeySpec);
cipher = Cipher.getInstance("RSA");
cipher.init(Cipher.DECRYPT_MODE, publicKey);
result = cipher.doFinal(result);
System.out.println("私钥加密、公钥解密 ---- 解密:" + new String(result));
// 4.公钥加密、私钥解密 ---- 加密
X509EncodedKeySpec x509EncodedKeySpec2 = new X509EncodedKeySpec(rsaPublicKey.getEncoded());
KeyFactory keyFactory2 = KeyFactory.getInstance("RSA");
PublicKey publicKey2 = keyFactory2.generatePublic(x509EncodedKeySpec2);
Cipher cipher2 = Cipher.getInstance("RSA");
cipher2.init(Cipher.ENCRYPT_MODE, publicKey2);
byte[] result2 = cipher2.doFinal(src.getBytes());
System.out.println("公钥加密、私钥解密 ---- 加密:" + Base64.encodeBase64String(result2));
// 5.私钥解密、公钥加密 ---- 解密
PKCS8EncodedKeySpec pkcs8EncodedKeySpec5 = new PKCS8EncodedKeySpec(rsaPrivateKey.getEncoded());
KeyFactory keyFactory5 = KeyFactory.getInstance("RSA");
PrivateKey privateKey5 = keyFactory5.generatePrivate(pkcs8EncodedKeySpec5);
Cipher cipher5 = Cipher.getInstance("RSA");
cipher5.init(Cipher.DECRYPT_MODE, privateKey5);
byte[] result5 = cipher5.doFinal(result2);
System.out.println("公钥加密、私钥解密 ---- 解密:" + new String(result5));
} catch (Exception e) {
e.printStackTrace();
}
}
/*public static String getEncPwd(String in) {
String ot = "";
if (!"".equals(in) && in != null) {
ot = Base64Util.getBase64Str(getRc4Str(in, Contants.PWDKEY), "encode");
}
return ot;
}
public static String getDecPwd(String in) {
String ot = "";
if (!"".equals(in) && in != null) {
ot = getRc4Str(Base64Util.getBase64Str(in, "decode"), Contants.PWDKEY);
}
return ot;
}*/
/* public static String getRc4Str(String aInput, String aKey) {
int[] iS = new int[256];
byte[] iK = new byte[256];
for (int i = 0; i < 256; i++) {
iS[i] = i;
}
int j = 1;
for (short i = 0; i < 256; i++) {
iK[i] = (byte) aKey.charAt((i % aKey.length()));
}
j = 0;
for (int i = 0; i < 255; i++) {
j = (j + iS[i] + iK[i]) % 256;
int temp = iS[i];
iS[i] = iS[j];
iS[j] = temp;
}
int i = 0;
j = 0;
char[] iInputChar = aInput.toCharArray();
char[] iOutputChar = new char[iInputChar.length];
for (short x = 0; x < iInputChar.length; x++) {
i = (i + 1) % 256;
j = (j + iS[i]) % 256;
int temp = iS[i];
iS[i] = iS[j];
iS[j] = temp;
int t = (iS[i] + (iS[j] % 256)) % 256;
int iY = iS[t];
char iCY = (char) iY;
iOutputChar[x] = (char) (iInputChar[x] ^ iCY);
}
return new String(iOutputChar);
}*/
}
RSA加密
最新推荐文章于 2024-09-15 20:51:37 发布