我有一个场景,我需要将结构序列化为字节数组或字符串,加密它然后将其存储在SQL表中。
问题是这个表可能会遇到数百万行,所以大小都很重要。
我一直在使用BinaryFormatter序列化为byte [],将其转换为Ascii,然后使用RijndaelManaged提供程序对其进行压缩。
在加密之前,字符串大约是230个字节。加密后,它超过600字节。
是否有人知道其他加密提供商是否会更好地做到这一点?或者,如果确实有更好的方法我应该这样做?
非常感谢,
ž
答案 0 :(得分:1)
通常,加密算法仅增加固定开销(对于IV,在非对称加密算法的情况下,加密对称密钥)。如果您看到大小增加2倍,则表示您在加密之前或之后正在执行某些操作,这会增加数据的大小。
我会删除ascii转换 - 加密算法在原始二进制数据上工作正常 - 并确保您作为原始二进制blob存储到数据库中,而不是base64-ing或类似。如果您仍然遇到问题,请发布您正在使用的代码。
答案 1 :(得分:1)
我发现了这个问题。
我做了一些事情 1 /停止使用.net序列化。我注意到序列化内容包括每个对象的汇编信息(例如文化,版本等)。它甚至会在您覆盖ISerializable并“滚动自己的”时执行此操作。我可以看到它为什么需要重新序列化...但我不想将它存储在每一行中。相反,我刚刚构建了一个分隔的字符串并将其转换为字节数组。我正在自我序列化。
2 /我在加密之前停止尝试将byte []转换为字符串(使用某种编码)。我现在只是将byte []传递给rijindal。
3 /我已经开始在表中使用varbinary并将加密结果写为原始字节。这似乎比尝试使用某种编码更有效。
所以 - 尽管如此,我已经将最终的加密产品减少到大约150个字节。大改进! ...而且,我还没有尝试压缩它。
感谢大家的帮助: - )
ž