我们的产品中存在一种情况,很长时间以来,某些数据已作为SQL字符串(在任何地方都可以选择MS SQL Server或sybase SQL)存储在应用程序的数据库中,并通过Windows API函数CryptEncrypt.(直接和可解密)进行了加密)
问题在于CryptEncrypt可以在输出中产生NULL,这意味着当将其存储在数据库中时,字符串操作有时会截断CipherText。
理想情况下,我们希望使用一种算法,该算法将产生不包含NULL的CipherText,因为这将对现有数据库造成最少的更改(将列从字符串更改为二进制,并且将代码处理为二进制而不是字符串)只需解密现有数据,然后在数据库升级时使用新算法重新加密。
该算法不必是最安全的,因为数据库已经处于相当安全的环境中(而不是开放网络/网络间),但是确实需要比ROT13更好(我几乎可以在脑海中解密)现在!)
编辑:顺便说一句,将密文更改为密文的任何特殊原因?密文似乎被更广泛地使用...
最佳答案
任何半体面的算法最终都有很大的机会在所得密文中的某处生成NULL值。
为什么在持久化到数据库之前不像base-64 encode这样生成的二进制blob? (sample implementation in C++)。
关于c++ - CryptEncrypt的合适替代品,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17670/