1. 程式人生 > 其它 >Java非對稱加密(RSA)工具類

Java非對稱加密(RSA)工具類

技術標籤:javajavarsa加密解密

廢話不對說直接上程式碼:

package cn.com;

import org.apache.commons.codec.binary.Base64;
import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;

import javax.crypto.Cipher;
import java.io.*;
import java.security.*;

/**
 * 非對稱加密解密測試類
 */
public class TestRSUtils {
    //公鑰字串
    private
static final String PUBLICKEY = "rO0ABXNyAD5vcmcuYm91bmN5Y2FzdGxlLmpjYWpjZS5wcm92aWRlci5hc3ltbWV0cmljLnJzYS5CQ1JTQVB1YmxpY0tleSUiag5b+myEAwACTAAHbW9kdWx1c3QAFkxqYXZhL21hdGgvQmlnSW50ZWdlcjtMAA5wdWJsaWNFeHBvbmVudHEAfgABeHBzcgAUamF2YS5tYXRoLkJpZ0ludGVnZXKM/J8fqTv7HQMABkkACGJpdENvdW50SQAJYml0TGVuZ3RoSQATZmlyc3ROb256ZXJvQnl0ZU51bUkADGxvd2VzdFNldEJpdEkABnNpZ251bVsACW1hZ25pdHVkZXQAAltCeHIAEGphdmEubGFuZy5OdW1iZXKGrJUdC5TgiwIAAHhw///+/gAAAAF1cgACW0Ks8xf4BghU4AIAAHhwAAAAgMFkRw8WShs0o9DqpTR6Mj3wbD3M1wW23K19pnbOW5uk5sK0y/on3tLoPyBcl7vjB0KMcP8Pgp9w7rvXC48aZ15ddU88w8ext86NksQL08yMiAJRHBN8+biz/f54pDD6j/y0JihxGv2N/X4MRW0btbv8rQK0AUbILhsVn3J5V4O7eHNxAH4AAv4AAAABdXEAfgAHAAAAAwEAAXh4"
; //私鑰字串 private static final String PRIVATEKEY = "rO0ABXNyAEJvcmcuYm91bmN5Y2FzdGxlLmpjYWpjZS5wcm92aWRlci5hc3ltbWV0cmljLnJzYS5CQ1JTQVByaXZhdGVDcnRLZXlsuofOAnNVLgIABkwADmNydENvZWZmaWNpZW50dAAWTGphdmEvbWF0aC9CaWdJbnRlZ2VyO0wADnByaW1lRXhwb25lbnRQcQB+AAFMAA5wcmltZUV4cG9uZW50UXEAfgABTAAGcHJpbWVQcQB+AAFMAAZwcmltZVFxAH4AAUwADnB1YmxpY0V4cG9uZW50cQB+AAF4cgA/b3JnLmJvdW5jeWNhc3RsZS5qY2FqY2UucHJvdmlkZXIuYXN5bW1ldHJpYy5yc2EuQkNSU0FQcml2YXRlS2V5RusJwAfPQRwDAAJMAAdtb2R1bHVzcQB+AAFMAA9wcml2YXRlRXhwb25lbnRxAH4AAXhwc3IAFGphdmEubWF0aC5CaWdJbnRlZ2VyjPyfH6k7+x0DAAZJAAhiaXRDb3VudEkACWJpdExlbmd0aEkAE2ZpcnN0Tm9uemVyb0J5dGVOdW1JAAxsb3dlc3RTZXRCaXRJAAZzaWdudW1bAAltYWduaXR1ZGV0AAJbQnhyABBqYXZhLmxhbmcuTnVtYmVyhqyVHQuU4IsCAAB4cP///v4AAAABdXIAAltCrPMX+AYIVOACAAB4cAAAAIDBZEcPFkobNKPQ6qU0ejI98Gw9zNcFttytfaZ2zlubpObCtMv6J97S6D8gXJe74wdCjHD/D4KfcO671wuPGmdeXXVPPMPHsbfOjZLEC9PMjIgCURwTfPm4s/3+eKQw+o/8tCYocRr9jf1+DEVtG7W7/K0CtAFGyC4bFZ9yeVeDu3hzcQB+AAT///7+AAAAAXVxAH4ACAAAAIBSBiqfawhGbra2cvdcASITJEh8k8d1XIBPs1Xp2Q+AvdnEJnPHZ6a6FJhFrRAMODgJkVCR1e3Em10eXZDBAuVpIuHM3y9Yr9ayeJyI6NTlTEc/mYPvoVU6voW6TNVD6d5TK2qBlUGSCgGloUqBm23N2r1QXRAgGeCrTHSz5r60UXh4c3EAfgAE///+/gAAAAF1cQB+AAgAAABAnrfAAPFKf00GVrq5pz0teMH0DUFrtUsqnzmjm0zvw2+kE/H0ZO09IOHiVFyP3djKnrj7OplpDENzXSWbT7W6UHhzcQB+AAT///7+AAAAAXVxAH4ACAAAAEAkIJyQRh+GKTx88JQ7BIB1yUJl4VvSSAACC9D5E/p9N1EUQgA6ElotJefSf/13B1zy8oe+4aQzTUTvCMstF90BeHNxAH4ABP///v4AAAABdXEAfgAIAAAAQEVW2R4EgYMhjKaEAPIFnvhQ0u1+4sZ6CqsPXgZtrIakQxTwUMuwL/EFa/yI/nq0iIxjVehHC+UEvuvS8ZIGlI14c3EAfgAE///+/gAAAAF1cQB+AAgAAABA8WcrdJXrcJFmekkdHkvjc+8XXToX5jUY5tV7Uzw66lS7ZSTeEgZgCgZk3Yql+keEPIqCwFlzZERJZ4KQO2GRkXhzcQB+AAT///7+AAAAAXVxAH4ACAAAAEDNFekWjECx3XnXwWutidfotLuD5C681olcAvhfVciMIOyI7H6r4SvY9x2TgHxDyKx6yb+qj+k3q+/U81Sa6NqLeHNxAH4ABP///v4AAAABdXEAfgAIAAAAAwEAAXg="
; /** * 初始化公鑰私鑰對 * keyPair.getPrivate() 為私鑰物件 * keyPair.getPublic() 為公鑰物件 * @return */ public static KeyPair initKey() { try { Provider provider =new org.bouncycastle.jce.provider.BouncyCastleProvider(); Security.addProvider(provider); SecureRandom random = new SecureRandom(); KeyPairGenerator generator = KeyPairGenerator.getInstance("RSA", provider); generator.initialize(1024,random); return generator.generateKeyPair(); } catch(Exception e) { throw new RuntimeException(e); } } /** * 公鑰加密(使用公鑰物件) * @param content * @param publicKey * @return */ public static String encrypt(String content, PublicKey publicKey) { try{ Security.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider()); Cipher cipher = Cipher.getInstance("RSA/NONE/OAEPWITHSHA256AndMGF1Padding","BC"); cipher.init(Cipher.ENCRYPT_MODE, publicKey); byte[] output = cipher.doFinal(content.getBytes()); BASE64Encoder encoder = new BASE64Encoder(); return encoder.encode(output); }catch (Exception e){ e.printStackTrace(); } return null; } /** * 私鑰解密(使用私鑰物件) * @param content * @param privateKey * @return */ public static String decrypt(String content, PrivateKey privateKey) { try { Security.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider()); Cipher cipher = Cipher.getInstance("RSA/NONE/OAEPWITHSHA256AndMGF1Padding","BC"); cipher.init(Cipher.DECRYPT_MODE, privateKey); BASE64Decoder decoder = new BASE64Decoder(); byte[] decodeBuffer = decoder.decodeBuffer(content); byte [] b = cipher.doFinal(decodeBuffer); return new String(b,"utf-8"); } catch (Exception e){ e.printStackTrace(); return null; } } /** * 使用私鑰鑰字串解密 * @param content * @param privateKeyStr * @return */ public static String decryptByPrivateKeyStr(String content, String privateKeyStr) throws IOException, ClassNotFoundException { ByteArrayInputStream inputStream1=new ByteArrayInputStream(Base64.decodeBase64(privateKeyStr.getBytes())); ObjectInputStream oInputStream1=new ObjectInputStream(inputStream1); PrivateKey privateKey1 = (PrivateKey) oInputStream1.readObject(); oInputStream1.close(); inputStream1.close(); return decrypt(content,privateKey1); } /** * 使用公鑰字串加密 * @param content * @param publicKeyStr * @return */ public static String encryptByPublicKeyStr(String content, String publicKeyStr) throws IOException, ClassNotFoundException { ByteArrayInputStream inputStream1=new ByteArrayInputStream(Base64.decodeBase64(publicKeyStr.getBytes())); ObjectInputStream oInputStream1=new ObjectInputStream(inputStream1); PublicKey publicKey = (PublicKey) oInputStream1.readObject(); oInputStream1.close(); inputStream1.close(); return encrypt(content,publicKey); } public static void main(String[] args) throws IOException, ClassNotFoundException { //1、加密 String content = "123xxxx"; String secretStr = encryptByPublicKeyStr(content,PUBLICKEY); System.out.println("密文:"+secretStr); //2、解密 String contentStr = decryptByPrivateKeyStr(secretStr, PRIVATEKEY); System.out.println("解密後:"+contentStr); } }