2

我们的产品中存在这样一种情况,即长期以来,一些数据作为 SQL 字符串(选择 MS SQL 服务器或任何位置的 sybase SQL)存储在应用程序的数据库中,这些数据是通过 Windows API 函数CryptEncrypt 加密的。 (直接且可解密)

问题是 CryptEncrypt 可以在输出中产生 NULL,这意味着当它存储在数据库中时,字符串操作将在某些时候截断 CipherText。

理想情况下,我们希望使用一种算法,该算法将生成不包含 NULL 的 CipherText,因为这将对现有数据库造成最少的更改(将列从字符串更改为二进制以及处理二进制而不是字符串的代码)并且只需在数据库升级时解密现有数据并使用新算法重新加密。

该算法不需要是最安全的,因为数据库已经处于相当安全的环境中(不是开放网络/互网),但确实需要比 ROT13 更好(我几乎可以在脑海中解密现在!)

编辑:顺便说一句,将密文更改为密文的任何特殊原因?密文似乎使用更广泛......

4

4 回答 4

3

任何半体面的算法最终都有很大的机会在结果密文中的某处生成 NULL 值。

为什么不在持久化到数据库之前对生成的二进制 blob进行类似base-64 的编码?C++ 中的示例实现)。

于 2008-08-20T09:49:56.333 回答
1

存储哈希是个好主意。但是,请务必阅读 Jeff 的您可能错误地存储密码

于 2008-08-20T10:41:15.837 回答
0

这是一条有趣的路线 OJ。我们正在研究一种不可逆方法的可行性(仍然确保我们没有显式检索要解密的数据),例如只存储一个哈希来比较提交

于 2008-08-20T10:06:03.970 回答
0

似乎处理此问题的开发人员将使用yEnc包装现有的加密以保持表的完整性,因为数据需要可检索,并且这节省了使用无限不可能的所有混乱......根深蒂固的装置。干杯伙计们

于 2008-08-20T11:16:49.930 回答