我有一个接收Unicode数据的API,但我只需要在其中存储ASCII。我想压缩&混淆(或加密)将在Unicode中持久化的字符串值。
我的愿望是要么压缩这个模式数据,要么加密它不被窥探。我认为不可能两者都做好。
考虑到我想将我的源数据限制为有效的,可打印的ASCII;如何将原始字符串值"压缩"为更小、更模糊或两者兼而有之的值?
这是我想象的工作方式(尽管你可能有更好的方法):
- 这个源代码将接受一个给定的字符串作为输入
- 该字符串的字节表示将被采用(UTF8, ASCII,你决定)
- 一些神奇的事情发生了-(这是我需要你的帮助的部分)
- 结果字节将被转换为int或long(无小数点)
- 使用此实用程序将数字转换为相应的字符http://baseanythingconvert.codeplex.com/SourceControl/changeset/view/77855 1558651
(注意,将用于强制约束的实用程序是,"最终"Unicode名称不得包括以下字符'/','','#','?'或'%')
Microsoft Azure Table有一个接受Unicode数据作为存储或属性名称的API。这是一个无模式的数据库(因此可以特别创建列),因此模式是按行存储的。缺点是该模式数据多次存储在磁盘上,并且还以XML blob的形式通过网络进行冗余传输。
此外,我正在研究一个动态加密/解密Azure表数据的实用程序,但模式是未加密的。我想以某种方式掩盖或混淆这个标题信息。
这些只是一些想法。
不是步骤3实际上直截了当地(只是压缩和/或加密数据成不同的字节)?对于7位ASCII,您还可以在压缩和/或加密之前,通过打包位来存储数据,以便它们适合更少的字节。
如果你可以在步骤5中使用UTF-32, UTF-8等,你可以访问Unicode标准中的所有字符,直到0x10FFFD,除了一些例外;例如,一些代码点在Unicode标准中是非字符,例如0xFFFF,而其他代码点是无效字符,例如0xD800。