2012-07-23 59 views
1

我在使用AES_128的Sql Server中测试加密。当我加密相同的文本(4111111111111111)时,加密的二进制数据每次都不相同。SQL Server 2008 R2中的AES是否需要初始化向量?

因为每次我需要使用初始化向量(IV),加密的数据是不同的?我的理解是,IV是用来防止重复的加密文本,以防止识别哪些值是相同的。

AES(CBC,CTR)的块链接方面是否创建了这些不同的加密值?

这里是一个例子。这些加密的相同的值(4111111111111111)的结果的三倍:

0x00AC935A664E3C4D97DD1F4A5E316333010000003D6FAE7E02787F52BC5D08BFE9E728E39DFA6CE4FAE2CDCD29D22BB8BEFF3FE9D9A02E7235558BEB11A41C218601B4DE 
0x00AC935A664E3C4D97DD1F4A5E31633301000000EDB2D01D6A4DD46241AA616CF74FC41A148EAE6B42E47F3B902F5A04D0021EC34FBE08D634A4C234540565BFB68CD578 
0x00AC935A664E3C4D97DD1F4A5E31633301000000D9671BB79C344B0835BB0DCB2FDD58A9AF05095B5ECE0C27077C7A57242674D92D9E1233B1ED1AAA007655F8D53A3DC8 
+1

由于IV的目的是从相同的文本字符串中创建不同的密文,所以当该字符串被多次加密时,我的猜测是这里已经使用了IV。 – 2012-07-23 18:15:59

+0

在我看来,密文已经处于某种格式,因为前三十个字节在所有三个结果中都是相同的,并且最终大小与输出大小应该是不一致的(没有任何附加数据,您输出大小应该是16个字节)。如果可以的话,就如何进行格式化进行一些研究。 – strangefreeworld 2012-07-23 20:01:40

回答

0

的SQL Server 2008增加显著量元数据来加密的输出,包括随机生成的IV值。只有输出的最后部分是加密数据。

除非您试图在非SQL上下文中解密数据,否则这不应该成为您的问题。如果是这种情况,您需要熟悉输出数据的确切格式,以便您了解如何正确解密。

上一个关于此主题的计算器问题(How to get compatibility between C# and SQL2k8 AES Encryption?)提出了一种可能的输出格式,但这看起来与您的输出结果不相符。以建议的格式,并把它应用到你的第一个输出的例子,我们将有:

00AC935A664E3C4D97DD1F4A5E316333的对称密钥
01000000固定的版本号
3D6FAE7E02787F52BC5D08BFE9E728E3随机IV
9DFA6CE4FAE2CDCD29D22BB8BEFF3FE9D9A02E7235558BEB11A41C218601B4DEGUID? 32字节

最后一个值看起来不符合建议的格式。它既不是8个字节的头部,也不是16个字节的数据的倍数,也不是28个字节的扩展头部数据加上16个字节数据的倍数。也许你的输出被截断了?