RSA非对称加密算法Java实现之输出key文件
生活随笔
收集整理的這篇文章主要介紹了
RSA非对称加密算法Java实现之输出key文件
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
場景:Java實現RSA,將公鑰和秘鑰分別輸出文件,公鑰用于加密,私鑰用于解密。
重點要關注解密時,不能直接傳String,要用byte[],所以需要加二者轉換函數。
參考代碼如下:
package sk.ml;import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.security.Key; import java.security.KeyPair; import java.security.KeyPairGenerator; import java.security.NoSuchAlgorithmException;import javax.crypto.Cipher; import javax.crypto.NoSuchPaddingException;public class RSAAsymmetricEncryption {/*** 公鑰加密,私鑰解密(非對稱加密)* */public static void main(String[] args) throws Exception {//生成公鑰文件和秘鑰文件并保存generateKey();//導入公鑰加密String express="13366668888";byte[] cipherText=publicEnrypy(express);String strCiphertext=byteToString(cipherText);//密文byte[]轉化成stringSystem.out.println(strCiphertext);//導入私鑰解密byte[] getcipherText=stringToByte(strCiphertext);//密文string轉化成byte[]byte[] retExpress=privateEncode(getcipherText);System.out.println(new String(retExpress));}//生成公鑰和秘鑰public static void generateKey() throws Exception{KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("RSA"); KeyPair keyPair = keyPairGenerator.generateKeyPair();// 生成鑰匙對 Key publicKey = keyPair.getPublic();// 得到公鑰 String puckeyFile="D:\\tmp\\rsa_pubkey.dat";saveKey(publicKey,puckeyFile);//保存公鑰Key privateKey = keyPair.getPrivate();// 得到私鑰 String prikeyFile="D:\\tmp\\rsa_prikey.dat";saveKey(privateKey,prikeyFile);//把私鑰保存到硬盤上 }//保存公鑰和秘鑰private static void saveKey(Key rsaKey,String filename) throws Exception{ObjectOutputStream outputStream = new ObjectOutputStream( new FileOutputStream(new File(filename)));outputStream.writeObject(rsaKey);}//導出公鑰和秘鑰private static Key loadKey(String filename) throws Exception {ObjectInputStream inputStream = new ObjectInputStream( new FileInputStream(new File(filename)));Key rsaKey = (Key) inputStream.readObject();return rsaKey;}/*** 加密的方法,使用公鑰進行加密* @throws Exception*/public static byte[] publicEnrypy(String express) throws Exception {Cipher cipher = Cipher.getInstance("RSA");String puckeyFile="D:\\tmp\\rsa_pubkey.dat";Key pubkey=loadKey(puckeyFile);cipher.init(Cipher.ENCRYPT_MODE, pubkey);// 設置為加密模式 byte[] result = cipher.doFinal(express.getBytes());// 對數據進行加密 return result;//返回密文}/*** 解密的方法,使用私鑰進行解密* @throws Exception*/public static byte[] privateEncode(byte[] cipherText) throws Exception {Cipher cipher = Cipher.getInstance("RSA"); String prikeyFile="D:\\tmp\\rsa_prikey.dat";Key prikey = loadKey(prikeyFile);// 從硬盤中讀取私鑰 cipher.init(Cipher.DECRYPT_MODE, prikey);//設置為解密模式,用私鑰解密 byte[] result = cipher.doFinal(cipherText);//對加密后的數據進行解密return result ;//返回明文 }// 把byte[]元素之間添加空格,并轉化成字符串返回, public static String byteToString(byte[] resouce){StringBuffer sb = new StringBuffer(); for (int i = 0; i < resouce.length; i++) { if (i == resouce.length-1) { sb.append(Byte.toString(resouce[i]));}else{ sb.append(Byte.toString(resouce[i]));sb.append(" "); } } return sb.toString(); } // 把字符串按照空格進行拆分成數組,然后轉化成byte[],返回 public static byte[] stringToByte(String resouce){ String[] strArr = resouce.split(" ");int len = strArr.length;byte[] clone = new byte[len];for (int i = 0; i < len; i++) { clone[i] = Byte.parseByte(strArr[i]);} return clone; } }
總結
以上是生活随笔為你收集整理的RSA非对称加密算法Java实现之输出key文件的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Java机器学习库ML之七分类预测输出概
- 下一篇: Linux下为文件增加列的shell脚本