CryptEncrypt 的合适替代品
Posted
技术标签:
【中文标题】CryptEncrypt 的合适替代品【英文标题】:Suitable alternative to CryptEncrypt 【发布时间】:2010-09-06 06:28:45 【问题描述】:我们的产品中存在这样一种情况,即长期以来,一些数据作为 SQL 字符串(选择 MS SQL 服务器或任何位置的 sybase SQL)存储在应用程序的数据库中,这些数据通过 Windows API 函数CryptEncrypt.(直接和可解密)
问题在于 CryptEncrypt 可以在输出中产生 NULL,这意味着当它存储在数据库中时,字符串操作会在某些时候截断 CipherText。
理想情况下,我们希望使用生成不包含 NULL 的 CipherText 的算法,因为这将对现有数据库造成最少的更改(将列从字符串更改为二进制,并改为处理二进制的代码字符串),只需在数据库升级时解密现有数据并使用新算法重新加密。
算法不需要是最安全的,因为数据库已经处于相当安全的环境中(不是开放网络/互联网),但确实需要比 ROT13 更好(我几乎可以解密现在在我的脑海里!)
编辑:顺便说一句,将密文更改为密文的任何特殊原因?密文似乎使用更广泛...
【问题讨论】:
【参考方案1】:任何半体面的算法最终都极有可能在生成的密文中的某处生成 NULL 值。
为什么不做类似base-64 encode 你得到的二进制blob 在持久化到数据库之前呢? (sample implementation in C++)。
【讨论】:
【参考方案2】:存储哈希是个好主意。但是,请务必阅读 Jeff 的 You're Probably Storing Passwords Incorrectly。
【讨论】:
【参考方案3】:这是一条有趣的路线 OJ。 我们正在研究一种不可逆方法的可行性(仍然确保我们没有显式检索要解密的数据),例如只需存储一个哈希来比较提交
【讨论】:
【参考方案4】:似乎处理此问题的开发人员将使用yEnc 包装现有加密以保持表的完整性,因为数据需要可检索,这节省了无限可能的所有混乱...... uhhh 在固定安装上更改柱类型。 伙计们干杯
【讨论】:
以上是关于CryptEncrypt 的合适替代品的主要内容,如果未能解决你的问题,请参考以下文章