簡體   English   中英

目標c。128加密.net aes

[英]objective c aes 128 encryption for .net aes

因此,我終於找到了一些更加明智的東西,在使用相同加密的.Net Wcf服務實現AES 128加密時更加明顯。 我現在的問題是,每當它試圖解密字符串時,它會有一個步驟,它會執行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互操作性?

查看AES在MSDN上保存文檔安全文章並向下滾動到標題為“使用AES類”的部分,“圖15使用AES”有一個很好的簡單加密/解密示例。

PS注意在某些塊密碼(如AES)模式(如CBC)中使用的填充,當不同的系統相互通信時,這些可能會很麻煩,因為填充/塊大小可能因系統而異...看到填充樂趣

編輯:剛發現這個小寶石...... 簡單的2路加密換c-sharp

您可以在此處找到適用於iPhone和.NET的現成示例

一般來說,密碼算法是通用的,應該可以在不同的語言中工作,只需要確保兩種算法(即在.NET和iPhone中):

  • 完全使用以相同方式編碼的相同密鑰進行存儲/傳輸(通常為base64)
  • 具有完全相同的參數,包括填充模式,操作模式(例如CBC / ECB)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM