3

そのため、同じ暗号化を使用して.NetWcfサービスにAES128暗号化を実装する際に、やっと不安定なことがわかりました。今の私の問題は、文字列を復号化しようとするたびに、FromBase64String変換を実行するステップがあり、エラーが発生することです。

static public string DecryptString(string message, string key)
{
    string output = "";
    Rijndael aes = new RijndaelManaged();

    try
    {
        byte[] encrypted = Convert.FromBase64String(message);
        byte[] cipherText = GetCipherText(encrypted);

        aes.Key = Convert.FromBase64String(key);
        aes.Mode = CipherMode.CBC;

        aes.IV = GetIV(encrypted);

        using (MemoryStream ms = new MemoryStream())
        {
            using (ICryptoTransform decryptor = aes.CreateDecryptor())
            {
                using (CryptoStream cs = new CryptoStream(ms, decryptor, CryptoStreamMode.Write))
                {
                    cs.Write(cipherText, 0, cipherText.Length);
                    cs.FlushFinalBlock();

                    byte[] decrypted = ms.ToArray();
                    output = Encoding.UTF8.GetString(decrypted);
                }
            }
        }
    }

エラーは次のとおりです。

インデックスが配列の範囲外だった。

そしてそれは

cs.FlushFinalBlock();

これは、メッセージ「heythere」と「25f9e794323b453885f5181f1b624d0b」のキーに対して生成された暗号化です。

0suql40BUGiDoFA4SdXJAA ==

これは私の.Net暗号化から来ています:

unNWQfm9RaU / HgKlDNEmoXZaTzsuBoTNsA2UvDKZhc4 =

PS AES 128のiPhone暗号化の場合、ここからコードを取得しました。

.NetとiPhone間のAES相互運用性?

4

2 に答える 2

0

MSDNのAES文書を安全に保つ記事を見て、「AESクラスの使用」というタイトルのセクションまでスクロールしてください。「図15 AESの使用」には、暗号化/復号化の優れた簡単な例があります。

PS特定のブロック暗号(AESなど)モード(CBCなど)で使用されるパディングに注意してください。パディング/ブロックサイズはシステムごとに異なる可能性があるため、異なるシステムが相互に通信している場合、これらは問題になる可能性があります...パディングの楽しみを見る

編集:この小さな宝石を見つけた... simple-2-way-encryption-for-c-sharp

于 2013-02-05T09:31:23.477 に答える
0

ここでiPhoneと.NETの両方の準備ができたサンプルを見つけることができます

一般に、暗号化アルゴリズムは普遍的であり、両方のアルゴリズム(つまり、.NETとiPhone)を確認する必要があるだけで、さまざまな言語で機能するはずです。

  • ストレージ/送信に同じ方法でエンコードされたものとまったく同じキーを使用する(通常はbase64)
  • パディングスキーマ、操作モード(CBC / ECBなど)を含むまったく同じパラメーターを使用する
于 2013-02-09T00:38:42.057 に答える