2Pascal-新时代的Pascal

标题: 跨平台 通用的 数据加密解密或编码解码的 设计思路 [打印本页]

作者: wang_80919    时间: 2017-10-21 10:04
标题: 跨平台 通用的 数据加密解密或编码解码的 设计思路
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);
就可以得到字符串了。
但是这种情况,很少见。
作者: wang_80919    时间: 2017-10-21 10:41
上述代码是将加密或编码结果转为了 Base64
如果希望转换为 Hex 可以用下面的代码。

跨平台 Unicode string 用 HexToStr StrToHex
http://www.2pascal.com/forum.php ... &tid=2731&fromuid=4
(出处: 2Pascal-新时代的Pascal)


通过 TStream 转为 TBytes 的代码,
再加上 上面链接的代码 就能将 TStream 转为 Hex 了。
[mw_shl_code=delphi,true]
  SetLength(ABytes, AStream.Size - AStream.Position);
  AStream.Read(ABytes, AStream.Size - AStream.Position);
  TempHexStr := StrToHex(ABytes);
[/mw_shl_code]

反过来的代码我就不写了。
作者: wfymqj    时间: 2017-10-21 10:47
来学习了,谢谢!
作者: pascal76    时间: 2017-10-23 13:15
来学习了
作者: hsanming    时间: 2017-10-23 13:46
好方法,学习了
作者: 红鱼儿    时间: 2017-10-23 13:47
学习
作者: zhuolong1987    时间: 2017-10-23 14:16
学习学习
作者: jianwt    时间: 2017-10-23 14:31
这个代码要支持!!!!!
作者: xmchcly    时间: 2017-10-23 14:42
学习学习
作者: xgwzw    时间: 2017-10-23 16:51
看看怎么转码
作者: bjabc    时间: 2017-10-24 09:33
好文章,感谢老猫
作者: pcspace    时间: 2017-10-30 18:12
咋整                                                 。
作者: csm55    时间: 2017-11-1 16:37
很好的知识
作者: he_19_79    时间: 2017-11-3 14:12
多谢!
作者: smshsieh    时间: 2017-11-18 14:49
好方法,学习了
作者: atkins    时间: 2017-11-19 11:20
好方法,学习了
作者: 9294341    时间: 2018-1-4 06:27
学习学习
作者: 448033396    时间: 2018-2-10 13:22
这个要顶啊。……。…。……。……
作者: idealstudio    时间: 2018-2-12 23:25
xuexixuei,全是我要的
作者: kgmnsh    时间: 2018-4-6 12:24
学习学习。。。
作者: kgmnsh    时间: 2018-4-6 12:29
晕,函数名都被翻译成中文了
作者: cqkmda    时间: 2018-8-23 10:25
谢谢分享,呵呵!
作者: abea008    时间: 2018-12-7 07:36
学习了,非常感谢。
作者: feipig    时间: 2019-1-3 05:57
看看..................
作者: plpznn    时间: 2019-1-3 06:33
威武,实用。
作者: cdtuql    时间: 2019-1-23 05:12
我想看,故回复
作者: delphifans    时间: 2019-2-17 10:51
好好学习
作者: wjh0494    时间: 2019-4-10 00:28
我来虚心学习,看看怎么转码
作者: tangnyzl    时间: 2019-7-17 10:24
thank you very much
作者: delphiboy    时间: 2019-11-7 14:15

看看学习下
作者: jim560115    时间: 2019-12-29 14:47
好方法,受教了,学习了
作者: akuan54    时间: 2020-1-9 08:16
学习了,谢谢!
作者: 先来一铜大铲    时间: 2020-3-3 08:53
偷偷的学
作者: xjwlnf    时间: 2020-4-20 08:09
下谢谢 数据加密
作者: chenhuan2011    时间: 2024-8-11 12:13
过来学习大佬们的思路。赞一个




欢迎光临 2Pascal-新时代的Pascal (http://2pascal.com/) Powered by Discuz! X3