跨平台 通用的 数据加密解密或编码解码的 设计思路
delphi 的 加密解密都是针对 Byte 来的。具体表现是 TBytes 和 TStream。
字符串,那是最终封装,方便使用而已。
delphi 内置的封装,都是 UTF8 编码的。
例如 Base64 UrlEncode 这些 都是 默认 UTF8 。
所以,自己写的 加密解密 编码解码。
也应如下设计。
注意 不要用 “复制代码” 这个按钮。
**** Hidden Message *****
当然 UTF8 换成 ANSI 或 Unicode 等 其他编码也是很容易的。
下面是按 TStream 设计。
**** Hidden Message *****
TBytes 和 TStream 是可以互相转换的
AStream := TBytesStream.Create(ABytes) //TBytes 转为 TStream
下面是 反过来 TStream 转为 TBytes;
SetLength(ABytes, AStream.Size - AStream.Position);
AStream.Read(ABytes, AStream.Size - AStream.Position);
也可以通过下面的代码转换就是麻烦些
ABytesStream := TBytesStream.Create(nil);
try
ABytesStream.CopyFrom(AStream, 0);
ABytes := ABytesStream.Bytes;
SetLength(ABytes, ABytesStream.Size);
finally
FreeAndNil(ABytesStream);
end;
上述 所有代码中的UTF8 换成ANSI ,立即就能支持 D7 版本编码或加密结果了。
如果你不知道结果是什么编码的,可以先用 内存流 代替字符串流(TMemoryStream 代替 TStringStream)。
先将结果保存到内存中。
然后你再去分析这个结果是什么编码的。
当然文件流(TFileStream)也可以,这样就去分析这个文件是什么编码的。
例如
**** Hidden Message *****
如果数据中包含了 BOM 其实就非常好办了
AStringList.LoadFromStream(AStream);
就可以得到字符串了。
但是这种情况,很少见。 上述代码是将加密或编码结果转为了 Base64
如果希望转换为 Hex 可以用下面的代码。
跨平台 Unicode string 用 HexToStr StrToHex
http://www.2pascal.com/forum.php ... &tid=2731&fromuid=4
(出处: 2Pascal-新时代的Pascal)
通过 TStream 转为 TBytes 的代码,
再加上 上面链接的代码 就能将 TStream 转为 Hex 了。
SetLength(ABytes, AStream.Size - AStream.Position);
AStream.Read(ABytes, AStream.Size - AStream.Position);
TempHexStr := StrToHex(ABytes);
反过来的代码我就不写了。 :)来学习了,谢谢! 来学习了:) 好方法,学习了 学习:lol 学习学习 这个代码要支持!!!!! 学习学习 看看怎么转码