|
delphi 的 加密解密都是针对 Byte 来的。
具体表现是 TBytes 和 TStream。
字符串,那是最终封装,方便使用而已。
delphi 内置的封装,都是 UTF8 编码的。
例如 Base64 UrlEncode 这些 都是 默认 UTF8 。
所以,自己写的 加密解密 编码解码。
也应如下设计。
注意 不要用 “复制代码” 这个按钮。
当然 UTF8 换成 ANSI 或 Unicode 等 其他编码也是很容易的。
下面是按 TStream 设计。
TBytes 和 TStream 是可以互相转换的
AStream := TBytesStream.Create(ABytes) //TBytes 转为 TStream
下面是 反过来 TStream 转为 TBytes;
SetLength(ABytes, AStream.Size - AStream.Position);
AStream.Read(ABytes, AStream.Size - AStream.Position);
也可以通过下面的代码转换就是麻烦些
[mw_shl_code=delphi,true]
ABytesStream := TBytesStream.Create(nil);
try
ABytesStream.CopyFrom(AStream, 0);
ABytes := ABytesStream.Bytes;
SetLength(ABytes, ABytesStream.Size);
finally
FreeAndNil(ABytesStream);
end;
[/mw_shl_code]
上述 所有代码中的 UTF8 换成 ANSI ,立即就能支持 D7 版本编码或加密结果了。
如果你不知道结果是什么编码的,可以先用 内存流 代替字符串流(TMemoryStream 代替 TStringStream)。
先将结果保存到内存中。
然后你再去分析这个结果是什么编码的。
当然文件流(TFileStream)也可以,这样就去分析这个文件是什么编码的。
例如
如果数据中包含了 BOM 其实就非常好办了
AStringList.LoadFromStream(AStream);
就可以得到字符串了。
但是这种情况,很少见。 |
|