2Pascal-新时代的Pascal

 找回密码
 立即注册
搜索
热搜: fastreport
查看: 9956|回复: 34
打印 上一主题 下一主题

跨平台 通用的 数据加密解密或编码解码的 设计思路

[复制链接]

90

主题

293

帖子

8万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
83930
跳转到指定楼层
楼主
发表于 2017-10-21 10:04:59 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
京东购书支持本站
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);
就可以得到字符串了。
但是这种情况,很少见。
(C)(P)Flying Wang
回复

使用道具 举报

90

主题

293

帖子

8万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
83930
沙发
 楼主| 发表于 2017-10-21 10:41:01 | 只看该作者
京东数码购物支持本站
上述代码是将加密或编码结果转为了 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]

反过来的代码我就不写了。
(C)(P)Flying Wang
回复 支持 反对

使用道具 举报

1

主题

43

帖子

1193

积分

金牌会员

Rank: 6Rank: 6

积分
1193
板凳
发表于 2017-10-21 10:47:25 | 只看该作者
京东购书支持本站
来学习了,谢谢!
回复 支持 反对

使用道具 举报

0

主题

17

帖子

54

积分

注册会员

Rank: 2

积分
54
5#
发表于 2017-10-23 13:46:40 | 只看该作者
京东数码购物支持本站
好方法,学习了
回复 支持 反对

使用道具 举报

0

主题

7

帖子

52

积分

注册会员

Rank: 2

积分
52
8#
发表于 2017-10-23 14:31:07 | 只看该作者
京东数码购物支持本站
这个代码要支持!!!!!
回复 支持 反对

使用道具 举报

0

主题

1

帖子

4

积分

新手上路

Rank: 1

积分
4
10#
发表于 2017-10-23 16:51:16 | 只看该作者
京东数码购物支持本站
看看怎么转码
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|新时代Pascal论坛

GMT+8, 2024-12-22 09:25 , Processed in 0.070685 second(s), 23 queries .

Powered by Discuz! X3

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表