Advertisement
Guest User

Untitled

a guest
Feb 8th, 2016
12,433
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.91 KB | None | 0 0
  1. -----BEGIN RSA PRIVATE KEY-----
  2. Proc-Type: 4,ENCRYPTED
  3. DEK-Info: DES-EDE3-CBC,56F3A98D9CFFA77A
  4.  
  5. X5h7SUDStF1tL16lRM+AfZb1UBDQ0D1YbQ6vmIlXiK....
  6. .....
  7. /KK5CZmIGw==
  8. -----END RSA PRIVATE KEY-----
  9.  
  10. import java.security.Key;
  11. import java.security.KeyFactory;
  12. import java.security.PrivateKey;
  13. import java.security.spec.PKCS8EncodedKeySpec;
  14. import javax.crypto.EncryptedPrivateKeyInfo;
  15. import javax.crypto.SecretKeyFactory;
  16. import javax.crypto.spec.PBEKeySpec;
  17.  
  18. public String decrypt(String keyDataStr, String passwordStr){
  19. // This key data start from "X5... to =="
  20. char [] password=passwordStr.toCharArray();
  21. byte [] keyDataBytes=com.sun.jersey.core.util.Base64.decode(keyDataStr);
  22.  
  23. PBEKeySpec pbeSpec = new PBEKeySpec(password);
  24. EncryptedPrivateKeyInfo pkinfo = new EncryptedPrivateKeyInfo(keyDataBytes);
  25. SecretKeyFactory skf = SecretKeyFactory.getInstance(pkinfo.getAlgName());
  26. Key secret = skf.generateSecret(pbeSpec);
  27. PKCS8EncodedKeySpec keySpec = pkinfo.getKeySpec(secret);
  28. KeyFactory kf = KeyFactory.getInstance("RSA");
  29. PrivateKey pk=kf.generatePrivate(keySpec);
  30. return pk.toString();
  31. }
  32.  
  33. java.io.IOException: DerInputStream.getLength(): lengthTag=50, too big.
  34. at sun.security.util.DerInputStream.getLength(DerInputStream.java:561)
  35. at sun.security.util.DerValue.init(DerValue.java:365)
  36. at sun.security.util.DerValue.<init>(DerValue.java:294)
  37. at javax.crypto.EncryptedPrivateKeyInfo.<init> (EncryptedPrivateKeyInfo.java:84)
  38.  
  39. static RSAPrivateKey decrypt(String keyDataStr, String ivHex, String password)
  40. throws GeneralSecurityException
  41. {
  42. byte[] pw = password.getBytes(StandardCharsets.UTF_8);
  43. byte[] iv = h2b(ivHex);
  44. SecretKey secret = opensslKDF(pw, iv);
  45. Cipher cipher = Cipher.getInstance("DESede/CBC/PKCS5Padding");
  46. cipher.init(Cipher.DECRYPT_MODE, secret, new IvParameterSpec(iv));
  47. byte[] pkcs1 = cipher.doFinal(Base64.getMimeDecoder().decode(keyDataStr));
  48. /* See note for definition of "decodeRSAPrivatePKCS1" */
  49. RSAPrivateCrtKeySpec spec = decodeRSAPrivatePKCS1(pkcs1);
  50. KeyFactory rsa = KeyFactory.getInstance("RSA");
  51. return (RSAPrivateKey) rsa.generatePrivate(spec);
  52. }
  53.  
  54. private static SecretKey opensslKDF(byte[] pw, byte[] iv)
  55. throws NoSuchAlgorithmException
  56. {
  57. MessageDigest md5 = MessageDigest.getInstance("MD5");
  58. md5.update(pw);
  59. md5.update(iv);
  60. byte[] d0 = md5.digest();
  61. md5.update(d0);
  62. md5.update(pw);
  63. md5.update(iv);
  64. byte[] d1 = md5.digest();
  65. byte[] key = new byte[24];
  66. System.arraycopy(d0, 0, key, 0, 16);
  67. System.arraycopy(d1, 0, key, 16, 8);
  68. return new SecretKeySpec(key, "DESede");
  69. }
  70.  
  71. private static byte[] h2b(CharSequence s)
  72. {
  73. int len = s.length();
  74. byte[] b = new byte[len / 2];
  75. for (int src = 0, dst = 0; src < len; ++dst) {
  76. int hi = Character.digit(s.charAt(src++), 16);
  77. int lo = Character.digit(s.charAt(src++), 16);
  78. b[dst] = (byte) (hi << 4 | lo);
  79. }
  80. return b;
  81. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement