Hi ,
I am getting this error while trying to decrypt the message using RSA private Key . I am using the default Integrated Weblogic Server for the Certificates and Private Key ,Public Key.
Any insight will be helpful .
Here is my code .
package mypackage;
import java.io.FileInputStream;
import java.io.IOException;
import java.security.Key;
import java.security.KeyStore;
import java.security.NoSuchAlgorithmException;
import java.security.cert.X509Certificate;
import javax.crypto.Cipher;
import javax.security.cert.CertificateException;
import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;
public class MyEncClass {
public static final String DEMO_IDENTITY_KS =
"C:\\Oracle\\Middleware\\wlserver_10.3\\server\\lib\\DemoIdentity.jks"; //private key
public static final String DEMO_IDENTITY_PASS =
"DemoIdentityKeyStorePassPhrase"; //trust store password
public static final String DEMO_TRUST_KS =
"C:\\Oracle\\Middleware\\wlserver_10.3\\server\\lib\\DemoTrust.jks"; //certificates
public static final String DEMO_TRUST_KS_PASS =
"DemoTrustKeyStorePassPhrase"; //trust store password
public static final String TEST_MSG = "1111-2222-3333-4444";
public static void main(String[] args) throws Exception {
MyEncClass certEncDec = new MyEncClass();
X509Certificate cert =
certEncDec.getCertificate("wlsdemocanew1", DEMO_TRUST_KS);
System.out.println("cert" + cert);
Key publicKey = getPublicKey("wlsdemocanew1", DEMO_TRUST_KS);
System.out.println("publicKey" + publicKey);
Key privateKey =
getPrivateKey("demoidentity", "DemoIdentityPassPhrase",
DEMO_IDENTITY_KS);
System.out.println("privateKey = " + privateKey);
String encryptedStr = certEncDec.encryptStrToStr(TEST_MSG);
System.out.println("Encrypted String " + encryptedStr);
String decryptedStr = certEncDec.decryptStrToStr(encryptedStr);
System.out.println("Decrypted String " + decryptedStr);
}
//
private static String encodeBASE64(byte[] bytes)
{
BASE64Encoder b64 = new BASE64Encoder();
return b64.encode(bytes);
}
//
private static byte[] decodeBASE64(String text) throws IOException
{
BASE64Decoder b64 = new BASE64Decoder();
return b64.decodeBuffer(text);
}
private static Key getPrivateKey(String alias, String password,
String keystore) throws Exception {
KeyStore ks = KeyStore.getInstance("JKS");
ks.load(new FileInputStream(keystore),
DEMO_IDENTITY_PASS.toCharArray());
Key result = ks.getKey(alias, password.toCharArray());
return result;
}
private static X509Certificate getCertificate(String alias,
String keystore) throws Exception {
KeyStore ks = KeyStore.getInstance("JKS");
ks.load(new FileInputStream(keystore),
DEMO_TRUST_KS_PASS.toCharArray());
X509Certificate result = (X509Certificate)ks.getCertificate(alias);
return result;
}
private static Key getPublicKey(String alias,
String keystore) throws Exception {
KeyStore ks = KeyStore.getInstance("JKS");
ks.load(new FileInputStream(keystore),
DEMO_TRUST_KS_PASS.toCharArray());
X509Certificate cert = (X509Certificate)ks.getCertificate(alias);
if (cert != null)
return cert.getPublicKey();
return null;
}
private String encryptStrToStr(String message) {
byte[] messageBytes = null;
byte[] ciphertextBytes = null;
try {
messageBytes = message.getBytes("UTF-8");
//Cipher cipher = Cipher.getInstance("RSA/ECB/NoPadding");
Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding");
Key publicKey = getPublicKey("wlsdemocanew1", DEMO_TRUST_KS);
cipher.init(Cipher.ENCRYPT_MODE, publicKey);
ciphertextBytes = cipher.doFinal(messageBytes);
} catch (IOException e) {
System.out.println("IOException:" + e);
} catch (CertificateException e) {
System.out.println("CertificateException:" + e);
} catch (NoSuchAlgorithmException e) {
System.out.println("NoSuchAlgorithmException:" + e);
} catch (Exception e) {
System.out.println("Exception:" + e);
}
return encodeBASE64(ciphertextBytes);
}
private String decryptStrToStr(String message) {
byte[] dectyptedText = null;
String result=null;
try {
Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding");
Key privateKey = getPrivateKey("demoidentity", "DemoIdentityPassPhrase", DEMO_IDENTITY_KS);
cipher.init(Cipher.DECRYPT_MODE, privateKey);
dectyptedText = cipher.doFinal(decodeBASE64(message));
result = new String(dectyptedText, "UTF8");
} catch (IOException e) {
System.out.println("IOException:" + e);
} catch (CertificateException e) {
System.out.println("CertificateException:" + e);
} catch (NoSuchAlgorithmException e) {
System.out.println("NoSuchAlgorithmException:" + e);
} catch (Exception e) {
System.out.println("Exception:" + e);
e.printStackTrace();
}
return result;
}
}
Output is like this
===============
cert[
[
Version: V3
Subject:
[email protected]
, CN=Demo Certificate Authority Constraints, OU=Security, O=BEA WebLogic, L=San Francisco, ST=California, C=US
Signature Algorithm: MD5withRSA, OID = 1.2.840.113549.1.1.4
Key: Sun RSA public key, 1024 bits
modulus: 156710490549361998307157784248321138052815240593647721920612234707636672474518428785627598279270666973708373499238042897073583063141391196686695714613451965982321202029488267174706489666542331075371055156322429926478110953568954643597391019270758359531772459952225396781945510442536454329769308555261743601031
public exponent: 65537
Validity: [From: Sat Nov 02 01:32:11 IST 2002,
To: Tue Oct 17 01:32:11 IST 2006]
Issuer:
[email protected]
, CN=Demo Certificate Authority Constraints, OU=Security, O=BEA WebLogic, L=San Francisco, ST=California, C=US
SerialNumber: [ 00]
Certificate Extensions: 1
[1]: ObjectId: 2.5.29.19 Criticality=true
BasicConstraints:[
CA:true
PathLen:1
]
]
Algorithm: [MD5withRSA]
Signature:
0000: 52 FB 4A 2A 5B 11 B2 A9 B6 4E D3 6F 33 7F DB 50 R.J*[....N.o3..P
0010: 4F 64 4A A2 37 EE C3 2C 2B 0E 81 96 F7 A5 27 E4 OdJ.7..,+.....'.
0020: 8A A9 16 70 47 22 EE 5A B6 58 89 A3 73 94 A6 21 ...pG".Z.X..s..!
0030: F5 F0 A9 30 2C DF 03 54 FF F7 B7 72 B7 3B 79 17 ...0,..T...r.;y.
0040: 74 8B 8B 6E A0 0B D2 2E 71 C8 19 40 86 BE E0 13 t..n....q..@....
0050: 97 95 84 8C 9E 32 0E C4 4C 13 CB C8 63 B6 04 5D .....2..L...c..]
0060: 77 63 6E 0B 96 C3 BE 31 7F 63 5B B7 F1 32 B6 8F wcn....1.c[..2..
0070: 37 AD 3C 41 E2 57 91 9C 34 13 47 06 C2 BC 36 01 7.<A.W..4.G...6.
]
publicKeySun RSA public key, 1024 bits
modulus: 156710490549361998307157784248321138052815240593647721920612234707636672474518428785627598279270666973708373499238042897073583063141391196686695714613451965982321202029488267174706489666542331075371055156322429926478110953568954643597391019270758359531772459952225396781945510442536454329769308555261743601031
public exponent: 65537
privateKey = Sun RSA private CRT key, 512 bits
modulus: 9436695505325102895578204061434242302275442710877846689834639378436107179909413564167457388512745989064904472628923233814244489684454717710931439837606787
public exponent: 65537
private exponent: 6502028201450483640580578644096077717953978532010925814824800887630817031844312415339134097873578467521500399028479795573481660222809945500550764663220193
prime p: 99713031281870580620598436771329694073758123055465722546049677182167437423991
prime q: 94638538052757449781692648760044096832814284083266897015953925555555867862357
prime exponent p: 20829018695527843030593292329516204767837232473706848675640021371498118899773
prime exponent q: 42772685614579179128335692147527444774523690351196507157980305399325034806033
crt coefficient: 63491303759104876081808156169222794756646094193349851654383050149493652264437
Encrypted String SBDGLh7W042fftr9HtcpS4OH4NQAQ4FqULzIxX6JeBUoJeXIvoPEcZn1x9lhkyOChXVcchECANeH
8RZfnXldXmNf6cnx0cTvHD+VtlaTpeyyaXz7tHcSw2cyXDhhRhoHQF/2GJtj3aGclBY6Igl6m9T7
t8ncvLwSCfqLbK1a61o=
Exception:javax.crypto.IllegalBlockSizeException: Data must not be longer than 64 bytes
javax.crypto.IllegalBlockSizeException: Data must not be longer than 64 bytes
at com.sun.crypto.provider.RSACipher.a(DashoA13*..)
at com.sun.crypto.provider.RSACipher.engineDoFinal(DashoA13*..)
at javax.crypto.Cipher.doFinal(DashoA13*..)
at mypackage.MyEncClass.decryptStrToStr(MyEncClass.java:134)
at mypackage.MyEncClass.main(MyEncClass.java:50)
Decrypted String null
Process exited with exit code 0.