`

非对称加密

阅读更多

非对称加密

 

非对称加密有一对密钥,公钥和私钥。可以用公钥加密,也可以用私钥加密。不过,公钥加密必须用私钥解密,私钥加密必须用公钥解密。如果不对应,则会报这样的异常

javax.crypto.BadPaddingException: Data must start with zero

 

 

代码如下:

 

Java代码 复制代码 收藏代码
  1. import java.security.KeyPair;
  2. import java.security.KeyPairGenerator;
  3. import javax.crypto.Cipher;
  4. publicclass test1 {
  5. //公钥加密
  6. publicbyte[] PublicEncrypt(KeyPair key,String str)throws Exception {
  7. Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding");
  8. cipher.init(Cipher.ENCRYPT_MODE, key.getPublic());
  9. return cipher.doFinal(str.getBytes("UTF8"));
  10. }
  11. //公钥解密
  12. publicbyte[] PublicDECRYPT (KeyPair key,byte[] data)throws Exception {
  13. Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding");
  14. cipher.init(Cipher.DECRYPT_MODE, key.getPublic());
  15. return cipher.doFinal(data);
  16. }
  17. //私钥加密
  18. publicbyte[] PrivateEncrypt (KeyPair key,String str)throws Exception {
  19. Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding");
  20. cipher.init(Cipher.ENCRYPT_MODE, key.getPrivate());
  21. return cipher.doFinal(str.getBytes("UTF8"));
  22. }
  23. //私钥解密
  24. publicbyte[] PrivateDECRYPT(KeyPair key,byte[] data)throws Exception {
  25. Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding");
  26. cipher.init(Cipher.DECRYPT_MODE, key.getPrivate());
  27. return cipher.doFinal(data);
  28. }
  29. publicstaticvoid main(String args[]) throws Exception {
  30. String str = "Hello World!";
  31. KeyPairGenerator keyGen = KeyPairGenerator.getInstance("RSA");
  32. keyGen.initialize(1024);
  33. KeyPair key = keyGen.generateKeyPair();
  34. test1 t = new test1();
  35. System.out.println("加密前原文:"+str);
  36. byte[] data = t.PublicEncrypt(key,str);
  37. System.out.println("私钥解密后:"+new String(t.PrivateDECRYPT(key,data)));
  38. byte[] data1 = t.PrivateEncrypt(key,str);
  39. System.out.println("公钥解密后:"+new String(t.PublicDECRYPT(key,data1)));
  40. }
  41. }
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics