我们的产品中存在这样一种情况,一些数据在很长一段时间内作为 SQL 字符串存储在应用程序的数据库中(可以选择 MS SQL Server 或 Sybase SQL Anywhere),并通过 Windows API 函数进行加密 加密。 (直接且可解密)

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

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

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

编辑:顺便说一句,将密文更改为密文有什么特殊原因吗?密文似乎使用更广泛......

有帮助吗?

解决方案

任何半不错的算法最终都会很有可能在生成的密文中的某个位置生成 NULL 值。

为什么不做类似的事情 Base-64 编码 在持久化到数据库之前生成的二进制 blob 是什么?(C++ 示例实现).

其他提示

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

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

处理这个问题的开发人员似乎将用以下内容包装现有的加密 yEnc 保持表的完整性,因为数据需要可检索,这可以节省所有那些无限不可能的混乱......呃,改变固定安装上的柱类型。干杯伙计们

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top