我们的产品中存在一种情况,很长一段时间,某些数据已作为SQL字符串(在任何地方选择MS SQL服务器或sybase SQL)存储在应用程序的数据库中,并通过Windows API函数{{3}加密(直接和解密)
问题是CryptEncrypt可以在输出中产生NULL,这意味着当它存储在数据库中时,字符串操作会在某些时候截断CipherText。
理想情况下,我们想使用一个算法来生成不包含NULL的CipherText,因为这将导致对现有数据库的更改量最少(将列从字符串更改为二进制,而代码则用于处理二进制文件)在数据库升级时,只需解密现有数据并使用新算法重新加密。
算法不需要是最安全的,因为数据库已经处于一个相当安全的环境(不是开放的网络/网络间),但确实需要比ROT13更好(我几乎可以解密在我脑海里!)
编辑:顺便说一下,将密文更改为密文的任何特殊原因?密文似乎被广泛使用......
答案 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在根深蒂固的装置上改变列类型。 干杯伙伴