RSA非对称加密算法Java实现
生活随笔
收集整理的這篇文章主要介紹了
RSA非对称加密算法Java实现
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
RSA適用場景:
1)乙方生成兩把密鑰(公鑰和私鑰)。公鑰是公開的,任何人都可以獲得,私鑰則是保密的。
2)甲方獲取乙方的公鑰,然后用它對信息加密。
3)乙方得到加密后的信息,用私鑰解密。
參考代碼如下:
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 javax.crypto.Cipher;public class RSAAsymmetricEncryption {/*** 公鑰加密,私鑰解密(非對稱加密)* */public static void main(String[] args) throws Exception {//公鑰加密String express="abc";publicEnrypy(express); //私鑰解密privateEncode();}/*** 加密的方法,使用公鑰進行加密* @throws Exception*/public static void publicEnrypy(String express) throws Exception {Cipher cipher = Cipher.getInstance("RSA");KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("RSA"); KeyPair keyPair = keyPairGenerator.generateKeyPair();// 生成鑰匙對 Key publicKey = keyPair.getPublic();// 得到公鑰 Key privateKey = keyPair.getPrivate();// 得到私鑰 saveKey(privateKey);//把私鑰保存到硬盤上 cipher.init(Cipher.ENCRYPT_MODE, publicKey);// 設置為加密模式 byte[] result = cipher.doFinal(express.getBytes());// 對數據進行加密 saveData(result);//把加密后的數據保存到硬盤上 System.out.println(result.toString());//顯示密文}/*** 解密的方法,使用私鑰進行解密* @throws Exception*/public static void privateEncode() throws Exception {Cipher cipher = Cipher.getInstance("RSA"); Key privateKey = loadKey();// 從硬盤中讀取私鑰 cipher.init(Cipher.DECRYPT_MODE, privateKey);//設置為解密模式,用私鑰解密 byte[] data = loadData();// 從硬盤中讀取加密后的數據 byte[] result = cipher.doFinal(data);//對加密后的數據進行解密,返回解密后的結果System.out.println( new String(result) );//顯示明文}/*** 從硬盤中加載加密后的文件* @return* @throws FileNotFoundException* @throws IOException*/private static byte[] loadData() throws FileNotFoundException, IOException {FileInputStream fileInputStream = new FileInputStream(new File("D:\\tmp\\rsa.dat"));ByteArrayOutputStream outputStream = new ByteArrayOutputStream();byte[] buffer = new byte[1024];int len = 0;while ((len = fileInputStream.read(buffer)) != -1) {outputStream.write(buffer, 0, len);}fileInputStream.close();return outputStream.toByteArray();}/*** 把加密后的密文保存到硬盤上* @param result* @throws FileNotFoundException* @throws IOException*/private static void saveData(byte[] result) throws FileNotFoundException, IOException {FileOutputStream fileOutputStream = new FileOutputStream(new File("D:\\tmp\\rsa.dat"));fileOutputStream.write(result);}/*** 從硬盤中加載私鑰* @return* @throws IOException* @throws FileNotFoundException* @throws ClassNotFoundException*/private static Key loadKey() throws IOException, FileNotFoundException, ClassNotFoundException {ObjectInputStream inputStream = new ObjectInputStream( new FileInputStream(new File("D:\\tmp\\rsa_prikey.dat")));Key privateKey = (Key) inputStream.readObject();return privateKey;}/*** 把私鑰保存到硬盤上* @param privateKey* @throws IOException* @throws FileNotFoundException*/private static void saveKey(Key privateKey) throws IOException, FileNotFoundException {ObjectOutputStream outputStream = new ObjectOutputStream( new FileOutputStream(new File("D:\\tmp\\rsa_prikey.dat")));outputStream.writeObject(privateKey);} }
總結
以上是生活随笔為你收集整理的RSA非对称加密算法Java实现的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: HtmlUnit爬取页面列表链接
- 下一篇: Java机器学习库ML之一Dataset