亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

C#加密庫如何處理小于加密算法所需的密鑰大小的密鑰?

C#加密庫如何處理小于加密算法所需的密鑰大小的密鑰?

C#
開滿天機 2021-03-31 11:10:40
讓我們以需要192位密鑰的TripesDES算法為例。C#如何處理較小的密鑰?假設128位密鑰(請參見下面的示例)在nodejs中,嘗試使用較小的密鑰將引發“無效密鑰大小”錯誤。C#繼續并輸出加密。我想內部使用某種填充?如果是這種情況,哪種填充?我認為PKCS7僅用于填充每個加密塊,對嗎?它與加密密鑰本身無關。    var cryptoProvider = new TripleDESCryptoServiceProvider    {        Key = new byte[]        {            0xAA,            0xAA,            0xAA,            0xAA,            0xAA,            0xAA,            0xAA,            0xAA,            0xAA,            0xAA,            0xAA,            0xAA,            0xAA,            0xAA,            0xAA,            0xAA        },        Mode = CipherMode.ECB,        Padding = PaddingMode.PKCS7    };    var encryptor = cryptoProvider.CreateEncryptor();    var token = encryptor.TransformFinalBlock(bytes, 0, bytes.Length);
查看完整描述

2 回答

?
千萬里不及你

TA貢獻1784條經驗 獲得超9個贊

讓我們以需要192位密鑰的TripesDES算法為例


那是不完全正確的。TripleDES基本上通過3個鍵將DES應用于3次。這三個鍵可以是:


都一樣。那是常規的DES。我們可以忽略該選項

都不同。這就是您所期望的192位密鑰(共3個密鑰)

2個鍵相同,第3個不同。比所有密鑰都不同時要弱,但仍比常規DES要強。這給了我們128位密鑰(兩個密鑰合在一起)。

.NET實現支持最后2個選項,因此,當您使用128位密鑰(就像您在問題中所做的那樣)時-它會將其拆分為2個密鑰,并使用其中一個(第一個)作為第3個密鑰,因此結果是您將擁有1個和第三鍵相同。


請注意,.NET將驗證您的密鑰不是“弱”三元DES密鑰,因此對于您所舉的示例,它將拋出異常,因為密鑰的左半部分和右半部分相同,如上所述。導致使用3個相同的密鑰進行加密,因此整個過程將簡化為常規DES。


通常,.NET會驗證您傳遞的密鑰是否具有給定算法的合法大小。


您可以通過首先使用一些16字節密鑰進行加密來驗證上述內容:


var key = new byte[] {

    0xAA,

    0xAA,

    0xAA,

    0xAA,

    0xAA,

    0xAA,

    0xAA,

    0xAA,

    0xAA,

    0xAA,

    0x00,

    0x00,

    0x00,

    0x00,

    0x00,

    0x00

};

然后手動將前8個字節附加到末尾以獲取24個字節的密鑰:


var fullKey = key.Concat(key.Take(8)).ToArray()

并使用它解密(因為上面的16字節和24字節密鑰相同,所以解密就很好了)。


查看完整回答
反對 回復 2021-04-10
  • 2 回答
  • 0 關注
  • 145 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號