Java笔记-非对称加密RSA的使用
生活随笔
收集整理的這篇文章主要介紹了
Java笔记-非对称加密RSA的使用
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
使用OpenSSL生成對應RSA私鑰和RSA公鑰:
#rsa私鑰: genrsa -out rsa_private_key.pem 1024 pkcs8 -topk8 -inform PEM -in rsa_private_key.pem -outform pem -nocrypt -out rsa_private_key_8.pem #rsa公鑰: rsa -in rsa_private_key_8.pem -pubout -out rsa_public_key.pemBase64使用的是這樣Maven
<dependency><groupId>commons-codec</groupId><artifactId>commons-codec</artifactId><version>1.11</version> </dependency>這里生成的公鑰和私鑰是Base64的,如下:
?公鑰:
?
所以用的時候需要先用base64解密。
使用邏輯是這樣的,先那這些密鑰進行Base64解密。
在用公鑰給內容加密,用私鑰解密:
Base64相關的代碼:
DataSecret.java
package cn.it1995.tool;import org.apache.commons.codec.binary.Base64;import java.io.UnsupportedEncodingException;public class DataSecret {public static byte[] encode(byte[] txt) throws UnsupportedEncodingException {return Base64.encodeBase64(txt);}public static byte[] decode(String txt){return Base64.decodeBase64(txt);} }RSA.java
package cn.it1995.tool;import javax.crypto.BadPaddingException; import javax.crypto.Cipher; import javax.crypto.IllegalBlockSizeException; import javax.crypto.NoSuchPaddingException; import java.io.UnsupportedEncodingException; import java.security.InvalidKeyException; import java.security.KeyFactory; import java.security.NoSuchAlgorithmException; import java.security.interfaces.RSAPrivateCrtKey; import java.security.interfaces.RSAPublicKey; import java.security.spec.InvalidKeySpecException; import java.security.spec.PKCS8EncodedKeySpec; import java.security.spec.X509EncodedKeySpec;public class RSA {private static final String RSA_ALGORITHM = "RSA/ECB/PKCS1Padding";//加密回的是base64public static String encrypt(String data, String key) throws UnsupportedEncodingException {String message = data;byte[] decode = DataSecret.decode(key);byte[] result = new byte[]{0};try {RSAPublicKey publicKey = (RSAPublicKey) KeyFactory.getInstance("RSA").generatePublic(new X509EncodedKeySpec(decode));Cipher cipher = Cipher.getInstance(RSA_ALGORITHM);cipher.init(Cipher.ENCRYPT_MODE, publicKey);result = cipher.doFinal(message.getBytes("UTF-8"));}catch (NoSuchAlgorithmException e) {e.printStackTrace();}catch (InvalidKeySpecException e) {e.printStackTrace();}catch (NoSuchPaddingException e) {e.printStackTrace();}catch (BadPaddingException e) {e.printStackTrace();}catch (IllegalBlockSizeException e) {e.printStackTrace();}catch (InvalidKeyException e) {e.printStackTrace();}return new String(DataSecret.encode(result));}//解密public static String decrypt(String encrypted, String key){byte[] content = DataSecret.decode(encrypted);byte[] decoded = DataSecret.decode(key);byte[] result = new byte[]{0};try {RSAPrivateCrtKey priKey = (RSAPrivateCrtKey)KeyFactory.getInstance("RSA").generatePrivate(new PKCS8EncodedKeySpec(decoded));Cipher cipher = Cipher.getInstance(RSA_ALGORITHM);cipher.init(Cipher.DECRYPT_MODE, priKey);result = cipher.doFinal(content);}catch (InvalidKeySpecException e){e.printStackTrace();}catch (NoSuchAlgorithmException e) {e.printStackTrace();}catch (NoSuchPaddingException e) {e.printStackTrace();}catch (InvalidKeyException e) {e.printStackTrace();}catch (BadPaddingException e) {e.printStackTrace();}catch (IllegalBlockSizeException e) {e.printStackTrace();}return new String(result);} }調用代碼:
private static final String PUB_KEY = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCjuN97tkBc0QcKGU9oXydaQN7q" +"wZnThxTOmdIc8O1yuA9FrDZpZ3Sz908vTqM/YPZkOUaYrGwsBO7FeQovoX7nQPKu" +"YQpRDqt7OKzhwPavyynH0Jz38PDyCBw45zwl4Ux8BtsggTrGVxAqNjO4KkuyL1QS" +"8amn4Fzl1CBre8Y0gQIDAQAB";private static final String PRI_KEY = "MIICdAIBADANBgkqhkiG9w0BAQEFAASCAl4wggJaAgEAAoGBAKO433u2QFzRBwoZ" +"T2hfJ1pA3urBmdOHFM6Z0hzw7XK4D0WsNmlndLP3Ty9Ooz9g9mQ5RpisbCwE7sV5" +"Ci+hfudA8q5hClEOq3s4rOHA9q/LKcfQnPfw8PIIHDjnPCXhTHwG2yCBOsZXECo2" +"M7gqS7IvVBLxqafgXOXUIGt7xjSBAgMBAAECgYAgp0uzcdsOaAY+ZmPnDitcHdoX" +"+jsC7EsjFZzJduf03G73V2yWwzKMfkPFzKpUhrM9tAq3gpQkh2tT6Vs1usEDbrDd" +"e08Cc3D5YWK7HuTfO3kkJTSNOK0JfuT1UQaTjCmDQWWjPmYbu6UN0UDv4Mo26dgl" +"cp9h0wlaPsSFN3O97QJBANgj+4i7ABAdbTuUfq6Tcr38E7wYSFTUeL5jTd4sO636" +"+KJ6zx4uTXAmxnt9OdIY1ihLRqDh8VbiorqOelGf6iMCQQDB6jZver3mTMe6ntSY" +"hx3JWOCDM3ULkPvOWGrAcRsNKjyIuo37taXa7fuqmVQQq9MJYikJfilMhkgwkV/X" +"ihcLAkBsOvBskj9A0ottJzmcT4dIbR6wtHQbzl078NwAIaQsxZyVN+vY0BTE0RXY" +"pmc6tmcevDr8uscv28Liqg/EKdCDAkAjL9C44djblUsYvgFtu/bXtlzm8ctnUeOf" +"ScP1L5DtDqD1XoStDAUQeOaVykTK0aL1rO4tXss3q5Yl2fs+LTyJAj8f7N5kzw08" +"9S5OWCHoEm5UOeAvjFh//cjXi6lyqetBW3w17muZ2OumUAbKJXksyzmT6/QRpkX3" +"S0w/tqdJXLs=";public static void main(String[] args) throws UnsupportedEncodingException {String content = "123456";String encrypted = RSA.encrypt(content, PUB_KEY);System.out.println(encrypted);System.out.println(RSA.decrypt(encrypted, PRI_KEY));............}運行截圖如下:
?
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的Java笔记-非对称加密RSA的使用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Java工作笔记-接入互联网的免费Web
- 下一篇: Web前端笔记-圆环随时间逐渐缩小(使用