Skip to Main Content

Java User Groups

Announcement

For appeals, questions and feedback about Oracle Forums, please email oracle-forums-moderators_us@oracle.com. Technical questions should be asked in the appropriate category. Thank you!

How to encrypt a key which is in the form of DER

imation3mFeb 16 2017 — edited Feb 16 2017

I have a public key for asymmetric encryption in the form of DER (Distinguished Encoding Rules) encoded binary data, which is a restricted form of the ASN.1 (Abstract Syntax Notation One) encoding.

MIIB/DCCAWmgAwIBAgIQpbarEXfe8rVDlWlg2T+ixzAJBgUrDgMCHQUAMBgxFjAUBgNVBAMTDUJBTktESE9GQVIwMDEwIBcNMTMwNzEwMDkxMjU5WhgPMjA5OTEyMjkyMDAwMDBaMBgxFjAUBgNVBAMTDUJBTktESE9GQVIwMDEwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBALZTB/2vKxWwCGhUdywVvikj8klvlzpZTJbVd0bRIN82bTTzp53SDXczc7mkto4vsqelGqnyjZcigyhj5y60SWYggc83d89I+i2Vo77am6aW8tfx1p/x9Op6bDLIN8V0uyoBK8IhRbuiugHmbP69Fyq4vXQ4+D2EzmmOuPRQfg4BAgMBAAGjTTBLMEkGA1UdAQRCMECAEAMkZd7uwQQG7803GjCmF7yhGjAYMRYwFAYDVQQDEw1CQU5LREhPRkFSMDAxghCltqsRd97ytUOVaWDZP6LHMAkGBSsOAwIdBQADgYEAhau3OD9QPoJm+H8v70WQmGUwJaS2IZORo/f8sMgUnVA6qoiD7BRkv8VVT0No4H+77YnYR2mtlCkU1BenKM3bC4WQXsXawMDSOoJcqBVLBFpYzl/8xpNrRyA8yyLUX37kXmH6mdioGLiNSKhQvX/XBYkTeOnsS2umt+zjS2JDS+g=

How I can encrypt this key to generate the cipher for text 1234.

I tried the below sample code from internet:

public class ATMPINClient{


  
public static void main(String[] args) throws Exception {

  
String pkey = "MIIB/DCCAWmgAwIBAgIQpbarEXfe8rVDlWlg2T+ixzAJBgUrDgMCHQUAMBgxFjAUBgNVBAMTDUJBTktESE9GQVIwMDEwIBcNMTMwNzEwMDkxMjU5WhgPMjA5OTEyMjkyMDAwMDBaMBgxFjAUBgNVBAMTDUJBTktESE9GQVIwMDEwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBALZTB/2vKxWwCGhUdywVvikj8klvlzpZTJbVd0bRIN82bTTzp53SDXczc7mkto4vsqelGqnyjZcigyhj5y60SWYggc83d89I+i2Vo77am6aW8tfx1p/x9Op6bDLIN8V0uyoBK8IhRbuiugHmbP69Fyq4vXQ4+D2EzmmOuPRQfg4BAgMBAAGjTTBLMEkGA1UdAQRCMECAEAMkZd7uwQQG7803GjCmF7yhGjAYMRYwFAYDVQQDEw1CQU5LREhPRkFSMDAxghCltqsRd97ytUOVaWDZP6LHMAkGBSsOAwIdBQADgYEAhau3OD9QPoJm+H8v70WQmGUwJaS2IZORo/f8sMgUnVA6qoiD7BRkv8VVT0No4H+77YnYR2mtlCkU1BenKM3bC4WQXsXawMDSOoJcqBVLBFpYzl/8xpNrRyA8yyLUX37kXmH6mdioGLiNSKhQvX/XBYkTeOnsS2umt+zjS2JDS+g=";

  
String atmPin = "1234";
  
byte[] key = pkey.getBytes();
  encrypt
(atmPin, key);


  
}

  
public static byte[] encrypt(String atmPin, byte[] keyCode)
  
throws Exception {
  X509Certificate cert
= X509Certificate.getInstance(keyCode);
  
RSAPublicKey rk = (RSAPublicKey) cert.getPublicKey();
  
System.out.println("Algorithm: " + rk.getAlgorithm());
  
System.out.println("Modules : " + rk.getModulus());
  
System.out.println("Hex - Modules : " + rk.getModulus().toString(16).toUpperCase());

  
System.out.println("Exponent : " + rk.getPublicExponent());
  
System.out.println("Name : " + cert.getSubjectDN().getName());
  
System.out.println("Issuer Name : " + cert.getIssuerDN().getName());
  
System.out.println("Not After : " + cert.getNotAfter());
  
System.out.println("Not Before : " + cert.getNotBefore());
  
System.out.println("Format : " + cert.getPublicKey().getFormat());
  
Cipher cipher = Cipher.getInstance("RSA");

  cipher
.init(Cipher.ENCRYPT_MODE, rk);
  
System.out.println("Actual PIN : " + atmPin);
  
byte[] PIN = cipher.doFinal(atmPin.getBytes("UTF-8"));

  
String encPIN = new sun.misc.BASE64Encoder().encode(PIN);
  
System.out.println("Encrypted Pin : " + encPIN);

  
return PIN;

  
}

}

Getting below error:

Exception in thread "main" javax.security.cert.CertificateException: InvocationTargetException: javax.security.cert.CertificateException: invalid DER-encoded certificate data
  at javax
.security.cert.X509Certificate.getInst(X509Certificate.java:226)
  at javax
.security.cert.X509Certificate.getInstance(X509Certificate.java:186)
  at atmpinclient
.ATMPINClient.encrypt(ATMPINClient.java:33)
  at atmpinclient
.ATMPINClient.main(ATMPINClient.java:26)
Java Result:

1

Please advise how to achieve this encryption.

Comments

Post Details

Added on Feb 16 2017
1 comment
276 views