2013-06-24 240 views
1

我希望能够在ASP.NET中执行应用程序级加密,生成一个字节数组,然后将其保存到MySQL blob列。然后,我会希望它是一个选项,如果您拥有加密密钥,则可以使用MySQL的AES_DECRYPT()函数对其进行解密。这似乎应该是可能的,因为AES_DECRYPT是AES/Rijndael的实现。在ASP.NET中可以使用AES_DECRYPT解密的加密()

MySQL AES_ENCRYPT/DECRYPT函数只需将密钥和字符串作为参数进行加密/解密即可。然而,我在ASP.NET/C#中看到的用于加密的示例还涉及为Key和IV(初始化向量)指定值。这些如何影响最终的加密字节数组,以及如何在使用AES_DECRYPT进行解密时将它们考虑在内)_?

+0

http://dev.mysql.com/doc/refman/4.1/en/encryption-functions.html#function_aes-encrypt – SLaks

+0

显然,'AES_ENCRYPT()'使用ECB,这是不安全的,不应该使用。 – SLaks

+0

@SLaks,抱歉,但这些评论并不是很有帮助。你的链接是我在我的问题中引用的一个旧版本的页面(没有解释)。我不确定ECB是什么,或者为什么不应该使用它。我链接到的MySQL文档说这些函数可以被认为是目前MySQL中最安全的加密函数。这是否意味着应该完全避免使用MySQL解密,并且允许MySQL解密的应用程序加密本质上是不安全的? – ilasno

回答

5

can do that通过设置RijndaelManaged使用ECB mode

但是,ECB模式不安全,应该避免。


一般来说,数据库是一个非常糟糕的地方执行加密。

如果你能够加密你的数据库中的数据,这意味着你的密文和密钥都在同一个地方;这打破了加密的目的。

你应该尽量远离密文存储;使用任何类型的SQL加密函数通常都会说明加密策略存在根本性的设计缺陷,可能会造成灾难性的后果。