hello!
Im trying to build a licensing library that will be used by our custom products for BB.
Im using the customer's name and email as the key generator. This two fields are encrypted using the Triple DES encryptor of BB. Im trying to decrypt the result of the encryption just to find out if the encryption went correctly. But, my decryption function doesnt decrypt the encrypted string. Here is my code for decryption:
Code:
public String decrypt(String encrypted) throws CryptoTokenException,
CryptoUnsupportedOperationException,
CryptoUnsupportedOperationException, IOException {
byte[] toDecryptArray = encrypted.getBytes();
byte[] keyArray = KEY.getBytes();
RandomSource.getBytes(keyArray);
//byte[] plainText = new byte[100];
TripleDESKey tripleDESKey = new TripleDESKey(keyArray);
TripleDESDecryptorEngine tripleDESDecryptorEngine =
new TripleDESDecryptorEngine(tripleDESKey);
PKCS5UnformatterEngine pKCS5FormatterEngine = new PKCS5UnformatterEngine(
tripleDESDecryptorEngine);
ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(
toDecryptArray);
BlockDecryptor blockDecryptor = new BlockDecryptor(pKCS5FormatterEngine,
byteArrayInputStream);
byte[] temp = new byte[100];
DataBuffer buffer = new DataBuffer();
System.out.println("blockDecrytor size: " + blockDecryptor.available());
// for( ;; ) {
// int bytesRead = blockDecryptor.read(temp);
// buffer.write(temp, 0, bytesRead);
buffer.write(blockDecryptor.getInputStream());
// if (bytesRead < 100) {
// // We ran out of data.
// break;
// }
// }
byte[] plaintextAndHash = buffer.getArray();
System.out.println("length : " + plaintextAndHash.length);
System.out.println("plainText : " + plaintextAndHash.toString());
System.out.println("byte in string: " + byteToString(plaintextAndHash));
int plaintextLength = plaintextAndHash.length - MD5Digest.DIGEST_LENGTH;
byte[] plaintext = new byte[plaintextLength];
byte[] hash0 = new byte[MD5Digest.DIGEST_LENGTH];
/*MD5Digest digest = new SHA1Digest();
digest.update( plaintext );
byte[] hash2 = digest.getDigest();
if( !Arrays.equals( hash, hash2 )) {
// TODO - Throw an exception?
throw new RuntimeException();
}
return plaintext;
*/
MD5Digest mD5Digest = new MD5Digest();
mD5Digest.update(plaintext);
byte[] hash1 = mD5Digest.getDigest();
System.out.println("hash1 value from byte to string: " + byteToString(
hash1));
//blockEncryptor.write(toEncryptArray);
//blockEncryptor.write(hash);
return new String(hash0);
/*
TripleDESKey key = new TripleDESKey(keyArray);
TripleDESDecryptorEngine tripleDESDecryptorEngine
= new TripleDESDecryptorEngine(key);
tripleDESDecryptorEngine.decrypt(toDecryptArray, 0, plainText, 0);
String plainString = new String(plainText);
return plainString;
*/
}
Any help will be very much appreciated.
Thank you