Adam Sweeney
Adam Sweeney

Reputation: 386

How to retrieve IV from an Encrypted string, then decrypt that string using AES128

I know very little about Encryption, but my goal is to essentially decrypt strings. I have been given the AES(128) key.

However, I must retrieve the IV from the Encrypted string, which is the first 16 bits.

Heres the doc for salesforce for more information (if what i explained was incorrect)

Encrypts the blob clearText using the specified algorithm and private key. Use this method when you want Salesforce to generate the initialization vector for you. It is stored as the first 128 bits (16 bytes) of the encrypted blob

http://www.salesforce.com/us/developer/docs/apexcode/Content/apex_classes_restful_crypto.htm (encryptWithManagedIV)

For Retrieving the IV I've tried something like this (I don't believe it's right though):

public string retrieveIv()
        {
            string iv = "";
            string input = "bwZ6nKpBEsuAKM8lDTYH1Yl69KkHN1i3XehALbfgUqY=";
            byte[] bytesToEncode = Encoding.UTF8.GetBytes(input);

            for(int i = 0; i <= 15; i++){
                iv += bytesToEncode[i].ToString(); ;
            }

            return iv;
        }

(Just ignore the fact that the input is hardcoded and not parameterized; easier for testing purposes)

Then use the Best answer from this question to decrypt the string

Upvotes: 0

Views: 2198

Answers (1)

Jon Skeet
Jon Skeet

Reputation: 1502756

The IV shouldn't be expressed as a string - it should be as a byte array, as per the AesManaged.IV property.

Also, using Encoding.UTF8 is almost certainly wrong. I suspect you want:

public static byte[] RetrieveIv(string encryptedBase64)
{
    // We don't need to base64-decode everything... just 16 bytes-worth
    encryptedBase64 = encryptedBase64.Substring(0, 24);

    // This will be 18 bytes long (4 characters per 3 bytes)
    byte[] encryptedBinary = Convert.FromBase64String(encryptedBase64);
    byte[] iv = new byte[16];

    Array.Copy(encryptedBinary, 0, iv, 0, 16);
    return iv;
}

Upvotes: 3

Related Questions