CryptEncrypt的合适替代品

时间:2008-08-20 09:37:03

标签: c++ encryption winapi

我们的产品中存在一种情况,很长一段时间,某些数据已作为SQL字符串(在任何地方选择MS SQL服务器或sybase SQL)存储在应用程序的数据库中,并通过Windows API函数{{3}加密(直接和解密)

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

理想情况下,我们想使用一个算法来生成不包含NULL的CipherText,因为这将导致对现有数据库的更改量最少(将列从字符串更改为二进制,而代码则用于处理二进制文件)在数据库升级时,只需解密现有数据并使用新算法重新加密。

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

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

4 个答案:

答案 0 :(得分:3)

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

为什么在持久保存到数据库之前不要执行base-64 encode生成的二进制blob之类的操作? (sample implementation in C++)。

答案 1 :(得分:1)

存储哈希是个好主意。但是,请务必阅读杰夫的You're Probably Storing Passwords Incorrectly

答案 2 :(得分:0)

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

答案 3 :(得分:0)

似乎处理此问题的开发人员将使用yEnc包装现有加密,以保持表的完整性,因为数据需要可检索,并且这可以节省所有混乱无聊的混乱。 .. uhhh在根深蒂固的装置上改变列类型。 干杯伙伴