4

我正在使用 AES_128 在 Sql Server 中测试加密。当我加密相同的文本(4111111111111111)时,加密的二进制数据每次都不同。

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

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

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

0x00AC935A664E3C4D97DD1F4A5E316333010000003D6FAE7E02787F52BC5D08BFE9E728E39DFA6CE4FAE2CDCD29D22BB8BEFF3FE9D9A02E7235558BEB11A41C218601B4DE
0x00AC935A664E3C4D97DD1F4A5E31633301000000EDB2D01D6A4DD46241AA616CF74FC41A148EAE6B42E47F3B902F5A04D0021EC34FBE08D634A4C234540565BFB68CD578
0x00AC935A664E3C4D97DD1F4A5E31633301000000D9671BB79C344B0835BB0DCB2FDD58A9AF05095B5ECE0C27077C7A57242674D92D9E1233B1ED1AAA007655F8D53A3DC8
4

1 回答 1

1

SQL Server 2008 将大量元数据添加到加密输出中,包括随机生成的 IV 值。只有输出的最后部分是加密数据。

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

先前关于此主题的 stackoverflow 问题(如何在 C# 和 SQL2k8 AES 加密之间获得兼容性?)建议了一种可能的输出格式,但这似乎与您的输出不太匹配。采用建议的格式并将其应用于您的第一个输出示例,我们将拥有:

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

最后一个值似乎与建议的格式不匹配。既不是8字节头加上16字节数据的倍数,也不是28字节扩展头数据加上16字节数据的倍数。也许您的输出被截断了?

于 2012-09-01T21:27:45.893 回答