加密字符串两次......好,坏或丑?

时间:2013-07-27 00:49:48

标签: c# encryption rijndael

我正在使用Rijndael算法(C#,ASP.Net 4.5)的加密类,出于好奇,我想知道加密字符串两次是多么有益。我的意思是用密钥加密字符串,然后用另一个密钥加密生成的加密?

这是否使它更安全(我知道什么都不安全,我的软件中可能有其他漏洞可用于利用)?是否值得CPU开销(不确定这有多重,但我无法想象它会亮)?

我在网上寻找一些建议,但却找不到任何建议。有什么想法吗?

2 个答案:

答案 0 :(得分:4)

有几个可能对你有用的问题:

一般的想法似乎就是这一点:

  

好吧,这样想吧。如果用粗暴打破一个加密   力量将比宇宙的寿命更长,你是否   更安全的加密方案将花费两倍的生命周期   宇宙?不可以。第一次加密无法打破。添加一个   第二次加密只会增加计算开销而没有实际好处。 - mikeazo

我建议在https://crypto.stackexchange.com/中提出这个问题,他们可能会为您提供有关该主题的更详细信息。

答案 1 :(得分:1)

密码学中有一条简单的规则。所有的安全都应该在关键时刻。基于此,加密两次应该没有额外的安全性,因为您的所有安全性都应该在您的密钥的选择和存储中。

现在说...如果做出错误的选择,你可以获得额外的安全保障。例如,假设您第一次使用ECB模式(电子代码簿)进行加密,由于该模式的工作方式(通过单独加密明文的每个块),您可以通过在更安全的模式下第二次加密来获得额外的安全性(CBC或CTR)。但是......你也可以第一次在CBC模式下加密。

您可以使用不安全的算法(例如DES)第一次加密,并使用更好的算法(例如AES)进行第二次加密。

但这些情况属于假设,需要您故意犯错误或极度疏忽。如果您在CTR或CBC等安全模式下使用AES(Rijandael)两次,那么只要您的密钥安全存储并以安全的方式选择,您就不会再加密两次加密。