1

次の暗号化および復号化アルゴリズムは、powershell および sharepoint アプリケーション ページで呼び出されます。

    public static string Encrypt(string dataToEncrypt, string password, string salt)
    {
        AesManaged aes = null;
        MemoryStream memoryStream = null;
        CryptoStream cryptoStream = null;

        try
        {
            Rfc2898DeriveBytes rfc2898 = new Rfc2898DeriveBytes(password, Encoding.UTF8.GetBytes(salt), 10000);

            aes = new AesManaged();
            aes.Key = rfc2898.GetBytes(32);
            aes.IV = rfc2898.GetBytes(16);

            memoryStream = new MemoryStream();
            cryptoStream = new CryptoStream(memoryStream, aes.CreateEncryptor(), CryptoStreamMode.Write);

            byte[] data = Encoding.UTF8.GetBytes(dataToEncrypt);
            cryptoStream.Write(data, 0, data.Length);
            cryptoStream.FlushFinalBlock();

            return Convert.ToBase64String(memoryStream.ToArray());
        }
        finally
        {
            if (cryptoStream != null)
                cryptoStream.Close();

            if (memoryStream != null)
                memoryStream.Close();

            if (aes != null)
                aes.Clear();
        }
    }

暗号化された文字列が変更されるのはなぜですか? アプリケーションドメインについてですか?

4

2 に答える 2

1

文字によって暗号化された文字列が異なります$$関数がpowershellを介して呼び出されている間はエスケープする必要があります。

于 2012-05-09T20:28:13.260 に答える
1

同じデータ、パスワード、ソルトを使用して質問コードを実行すると、毎回同じ結果が得られます。1 バイトでも変更すると、残りの部分が変更される場合でも、dataToEncrypt と Salt が毎回同じであることを確認する必要があります。

ただし、セマンティック セキュリティに関しては、それはあなたが望むものではありません。ランダムなソルトを使用してパスワードの総当りを困難にし、ランダムな非秘密の IV セットを使用して、2 つの同一の平文が同じ暗号文を持たないようにします。

暗号化アルゴリズムのセキュリティ機能を設計どおりに使用して、string を暗号化および復号化するためのベスト プラクティスの例を次に示します。これSimpleEncryptWithPasswordはあなたがやっていることと似ていますが、この例では派生キーの反復は可変であり、パフォーマンス上の理由からおそらくそれをハードコーディングしたいと思うでしょう。

于 2012-05-04T13:41:50.463 に答える