我需要一种加密方法来加密(不编码)文件名,以便生成的加密字符串可以存储在SQLite表中。
加密方法不得在生成的TString(非ANSI)中插入#0
个字符。
示例:
hello_world.txt
y381a82jzseoi1
两根弦的长度必须相同,或者长度至少不超过10-15%。
有什么建议吗?
答案 0 :(得分:3)
我会这样做:
TEncoding.GetBytes
从文本转换为二进制。您需要决定编码。支持Unicode UTF-8或UTF-16将是最可能的选择。通常,UTF-8在空间方面效率最高。TEncoding.GetBytes
返回的二进制数据转换为加密的二进制数据。请注意,我已避免将加密的二进制数据转换回文本。这就是通过简单地侧面解决问题来解决您避免空终止符的愿望。您要认识到的关键点是加密操作是二进制数据而不是文本。加密算法对文本进行操作是一种非常常见的误解。
如果由于某些原因我没有预料到,您只需将数据存储为文本,那么您应该将其从二进制编码为文本。您可以实现base255编码以避免使用null终止符,并保持大小不变。