c# 2.0 - 3DES - Decrypt encrypted text (by JAVA) in C# -
here situation:
- the encrypted text done in java (which have no java background @ all)
- the method 3des
- the padded pkcs#5
- base 64
the decryption in c#, , here code:
    public static string decryptstring(string message, string passphrase)     {         byte[] results;         utf8encoding utf8 = new utf8encoding();          md5cryptoserviceprovider hashprovider = new md5cryptoserviceprovider();         byte[] tdeskey = hashprovider.computehash(utf8.getbytes(passphrase));          tripledescryptoserviceprovider tdesalgorithm = new tripledescryptoserviceprovider();          tdesalgorithm.key = tdeskey;         tdesalgorithm.mode = ciphermode.ecb;         tdesalgorithm.padding = paddingmode.pkcs7;          byte[] datatodecrypt = convert.frombase64string(message);          try         {             icryptotransform decryptor = tdesalgorithm.createdecryptor();             results = decryptor.transformfinalblock(datatodecrypt, 0, datatodecrypt.length);         }                 {             tdesalgorithm.clear();             hashprovider.clear();         }          return utf8.getstring(results);     } however, when tried decrypt, got error message: bad data
where missing here?
thanks in advance.
added, , here's how encryption works:
<cffunction name="gettoken" returntype="string" output="false">     <cfscript>         plaintext = getplaintext();         rawsecretkey = createobject("java","sun.misc.base64decoder").decodebuffer(variables.encryptionkey);          secretkeyspec = createobject("java","javax.crypto.spec.secretkeyspec").init(rawsecretkey,"desede");          cipher = createobject("java","javax.crypto.cipher").getinstance("desede");         cipher.init(cipher.encrypt_mode, secretkeyspec);          encrypted = cipher.dofinal(plaintext.getbytes()); // byte array (a binary in cf)          return urlencodedformat(tostring(tobase64(encrypted)));     </cfscript> </cffunction> update: issue has been resolved. problem key needed converted base64.
the answer:
instead of:
byte[] tdeskey = hashprovider.computehash(utf8.getbytes(passphrase)); do this:
byte[] tdeskey = convert.frombase64string(passphrase); that solves issue.
Comments
Post a Comment