Coldfusion encryption and decryption in C #

Here is the code used for encryption in coldfusion

<cfset strBase64Value = encrypt(strValue,24 character key,AES) />

It generates encrypted values, such as 714FEA9A9A2184769CA49D5133F08580, which seem strange to me, given that these are only uppercase and numbers.

Which C # library should I use to properly decrypt it?

Also, looking at this information , it seems that by default it uses the UUEncode algorithm for encoding.

Should I ask encrypter to use Base64 as an encoding parameter?

0
source share
2 answers

It generates encrypted values ​​such as 714FEA9A9A2184769CA49D5133F08580

"Hex", "UUEncode" . "hex", "base64" . , .

RijndaelManaged . ColdFusion # . :

  • "AES" "AES/ECB/PKCS5Padding"
  • "ECB" IV
  • base64

NB: , SUN PKCS5Padding (CF/Java) PaddingMode.PKCS7 (#). , "... SUN Java" [s] PKCS # 5, PKCS # 7 - "PKCS5Padding" "PKCS7Padding". , 8- , () DES- ".

, , # , . , base64. API, , encrypt():

ColdFusion

<cfscript>
    plainText     = "Nothing to see";
    // 128 bit key base64 encoded
    keyInBase64   = "Y25Aju8H2P5DR8mY6B0ezg==";
    // "AES" is short for "AES/ECB/PKCS5Padding"
    encryptedText = encrypt(plainText, keyInBase64, "AES", "hex");
    WriteDump( encryptedText );
    // result: 8889EDF02F181158AAD902AB86C63951 
</cfscript>

#

byte[] bytes = SomeMethodToConvertHexToBytes( encryptedText );
byte[] key = Convert.FromBase64String( keyInBase64 );

string decryptedText = null;

using (RijndaelManaged algorithm = new RijndaelManaged())
{

    // initialize settings to match those used by CF
    algorithm.Mode = CipherMode.ECB;
    algorithm.Padding = PaddingMode.PKCS7;
    algorithm.BlockSize = 128;
    algorithm.KeySize = 128;
    algorithm.Key = key;

    ICryptoTransform decryptor = algorithm.CreateDecryptor();

    using (MemoryStream msDecrypt = new MemoryStream(bytes))
    {
        using (CryptoStream csDecrypt = new CryptoStream(msDecrypt, decryptor, CryptoStreamMode.Read))
        {
           using (StreamReader srDecrypt = new StreamReader(csDecrypt))
           {

               decryptedText = srDecrypt.ReadToEnd();
           }
        }
    }
}

Console.WriteLine("Encrypted String: {0}", encryptedText);
Console.WriteLine("Decrypted String: {0}", decryptedText);

, (, , ) , CBC mode ECB. CF.

+5

- JAVA, , / coldfusion "Hex" "tripledes". :

private static final String PADDING = "DESede/ECB/PKCS5Padding";
private static final String UTF_F8 = "UTF-8";
private static final String DE_SEDE = "DESede";
private String secretKey;


public String encrypt(String message) throws Exception {

    secretKey = getSecretKey();

    final byte[] secretBase64Key = Base64.decodeBase64(secretKey);
    final SecretKey key = new SecretKeySpec(secretBase64Key, DE_SEDE);
    final Cipher cipher = Cipher.getInstance(PADDING);
    cipher.init(Cipher.ENCRYPT_MODE, key);
    final byte[] plainTextBytes = message.getBytes();
    final byte[] cipherText = cipher.doFinal(plainTextBytes);

    return Hex.encodeHexString(cipherText);
}

public String decrypt(String keyToDecrypt) throws Exception {

    secretKey = getSecretKey();

    byte[] message = DatatypeConverter.parseHexBinary(keyToDecrypt);
    final byte[] secretBase64Key = Base64.decodeBase64(secretKey);
    final SecretKey key = new SecretKeySpec(secretBase64Key, DE_SEDE);
    final Cipher decipher = Cipher.getInstance(PADDING);
    decipher.init(Cipher.DECRYPT_MODE, key);
    final byte[] plainText = decipher.doFinal(message);

    return new String(plainText, UTF_F8);
}
+1

Source: https://habr.com/ru/post/1679381/


All Articles