Java非对称加密(公钥加密,私钥解密)
发布时间:2020-05-24 19:22:23 所属栏目:Java 来源:互联网
导读:Java非对称加密(公钥加密,私钥解密)
下面是脚本之家 jb51.cc 通过网络收集整理的代码片段。 脚本之家小编现在分享给大家,也给大家做个参考。 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 AsymmetricEncryption { public static void main(String[] args) throws Exception { publicEnrypy(); privateEncode(); } /** * 加密的方法,使用公钥进行加密 * @throws Exception */ public static void publicEnrypy() throws Exception { Cipher cipher = Cipher.getInstance("RSA"); KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("RSA"); // 生成钥匙对 KeyPair keyPair = keyPairGenerator.generateKeyPair(); // 得到公钥 Key publicKey = keyPair.getPublic(); // 得到私钥 Key privateKey = keyPair.getPrivate(); // 设置为加密模式 cipher.init(Cipher.ENCRYPT_MODE,publicKey); // 对数据进行加密 byte[] result = cipher.doFinal("aaa".getBytes()); //把私钥保存到硬盘上 saveKey(privateKey); //把加密后的数据保存到硬盘上 saveData(result); } /** * 解密的方法,使用私钥进行解密 * @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( "E://data.data")); ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); byte[] buffer = new byte[1024]; int len = 0; while ((len = fileInputStream.read(buffer)) != -1) { outputStream.write(buffer,len); } fileInputStream.close(); return outputStream.toByteArray(); } /** * 从硬盘中加载私钥 * @return * @throws IOException * @throws FileNotFoundException * @throws ClassNotFoundException */ private static Key loadKey() throws IOException,FileNotFoundException,ClassNotFoundException { ObjectInputStream inputStream = new ObjectInputStream( new FileInputStream(new File("E://private_key"))); Key privateKey = (Key) inputStream.readObject(); return privateKey; } /** * 把加密后的密文保存到硬盘上 * @param result * @throws FileNotFoundException * @throws IOException */ private static void saveData(byte[] result) throws FileNotFoundException,IOException { FileOutputStream fileOutputStream = new FileOutputStream(new File( "E://data.data")); fileOutputStream.write(result); } /** * 把私钥保存到硬盘上 * @param privateKey * @throws IOException * @throws FileNotFoundException */ private static void saveKey(Key privateKey) throws IOException,FileNotFoundException { ObjectOutputStream outputStream = new ObjectOutputStream( new FileOutputStream(new File("E://private_key"))); outputStream.writeObject(privateKey); } } 以上是脚本之家(jb51.cc)为你收集整理的全部代码内容,希望文章能够帮你解决所遇到的程序开发问题。 如果觉得脚本之家网站内容还不错,欢迎将脚本之家网站推荐给程序员好友。 (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |