0

私は暗号化についてほとんど知りませんが、私の目標は基本的に文字列を解読することです。私は AES(128) キーを受け取りました。

ただし、暗号化された文字列から IV を取得する必要があります。これは最初の 16 ビットです。

詳細については、セールスフォースのドキュメントを参照してください(説明が間違っていた場合)

指定されたアルゴリズムと秘密鍵を使用して blob clearTextを暗号化します。Salesforce で初期化ベクトルを生成する場合は、このメソッドを使用します。暗号化された BLOB の最初の 128 ビット (16 バイト) として格納されます。

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

IVを取得するために、私はこのようなことを試しました(ただし、それが正しいとは思いません):

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;
        }

(入力がハードコードされており、パラメーター化されていないという事実は無視してください。テスト目的の方が簡単です)

次に、この質問のベストアンサーを使用して文字列を復号化します

4

1 に答える 1

3

IV は文字列として表現するべきではありません -AesManaged.IVプロパティに従って、バイト配列として表現する必要があります。

また、使用Encoding.UTF8はほぼ確実に間違っています。私はあなたが欲しいと思う:

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;
}
于 2012-05-24T18:56:29.243 に答える