CryptEncrypt的合适替代品

时间:2020-03-05 18:41:02  来源:igfitidea点击:

我们的产品中存在一种情况,很长时间以来,某些数据已作为SQL字符串(在任何地方都可以选择MS SQL Server或者sybase SQL)存储在应用程序的数据库中,该字符串通过Windows API函数CryptEncrypt进行了加密。 (直接和可解密)

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

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

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

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

解决方案

回答

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

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

回答

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

回答

存储散列是一个好主意。但是,请务必阅读Jeff的"我们可能存储了错误的密码"。

回答

似乎处理此问题的开发人员将使用yEnc包装现有的加密,以保留表的完整性,因为需要检索数据,而这节省了用infinite-improbab进行的所有混乱工作。根深蒂固的设施。
欢呼的家伙