DELPHI盒子
!实时搜索: 盒子论坛 | 注册用户 | 修改信息 | 退出
检举帖 | 全文检索 | 关闭广告 | 捐赠
技术论坛
 用户名
 密  码
自动登陆(30天有效)
忘了密码
≡技术区≡
DELPHI技术
lazarus/fpc/Free Pascal
移动应用开发
Web应用开发
数据库专区
报表专区
网络通讯
开源项目
论坛精华贴
≡发布区≡
发布代码
发布控件
文档资料
经典工具
≡事务区≡
网站意见
盒子之家
招聘应聘
信息交换
论坛信息
最新加入: laidabin
今日帖子: 1
在线用户: 3
导航: 论坛 -> DELPHI技术 斑竹:liumazi,sephil  
作者:
男 itpc1 (itpc1) ▲▲▲▲△ -
普通会员
2018/4/13 9:45:21
标题:
参照一个BASE64加解密程序编程,为什么我和他的加解密结果最后不一样呢? 浏览:1869
加入我的收藏
楼主: 在他那程序中输入1,点加密得Tg==。
2得TQ==
3得TA==
4得Sw==
5得Sg==
6得SQ==
7得SA==
8得Rw==
此帖子包含附件:
PNG 图像
大小:2,000B
----------------------------------------------
-
作者:
男 itpc1 (itpc1) ▲▲▲▲△ -
普通会员
2018/4/13 9:48:25
1楼: 以下是我编写的程序源代码:
//Delphi 10.2
unit Unit1;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, EncdDecd, Vcl.StdCtrls;

type
  TForm1 = class(TForm)
    Edit1: TEdit;
    Button1: TButton;
    Edit2: TEdit;
    Label1: TLabel;
    Label2: TLabel;
    Button2: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
Edit2.Text:=UTF8Decode(EncodeString(Edit1.Text));
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
Edit1.Text:=UTF8Encode(DecodeString(Edit2.Text));
end;

end.
----------------------------------------------
-
作者:
男 itpc1 (itpc1) ▲▲▲▲△ -
普通会员
2018/4/13 9:52:03
2楼: 附件为他编写的BASE64加解密程序。
此帖子包含附件:itpc1_20184139523.zip 大小:191.9K
----------------------------------------------
-
作者:
男 wang_80919 (Flying Wang) ★☆☆☆☆ -
普通会员
2018/4/13 11:11:03
3楼: 跨平台 字符串 讨论(以及 字符串编码 讨论)
http://2pascal.com/forum.php?mod=viewthread&tid=1654&fromuid=4
(出处: 2Pascal-新时代的Pascal)

其实和这个帖子没啥关系,这个帖子只是告诉你 UTF8 不是你这样转的而已。



楼主,你自己看看。
http://base64.xpcha.com/
http://www1.tc711.com/tool/BASE64.htm
http://tool.oschina.net/encrypt?type=3

他们 哪个和 你发的破程序 一样了?
----------------------------------------------
(C)(P)Flying Wang
作者:
男 vkow (vkow) ★☆☆☆☆ -
普通会员
2018/4/13 11:15:56
4楼: 我很早之前也发现过这个问题。

当时是把要加密的字符串保存成文件,用UE打开发现字节都不一样。

之后就各种转码糊弄成一样的了。

看了上面的讨论,才明白发生了什么问题。
----------------------------------------------
-
作者:
男 earthsbest (全能中间件) ▲▲▲▲△ -
普通会员
2018/4/13 11:56:01
5楼: 你的EXE的base64('1')=正常的base64('N'),对应关系如下:
0=O
1=N
2=M
3=L
4=K
5=J
6=I
7=H
8=G
9=F
----------------------------------------------
Delphi4Linux Delphi三层/FireDAC 技术群:734515869 http://www.cnblogs.com/rtcmw
作者:
男 itpc1 (itpc1) ▲▲▲▲△ -
普通会员
2018/4/13 13:10:39
6楼: 使用他写的程序将ABCDEFGHIJKLMNOPQRSTUVWXYZ加密后得Pj08Ozo5ODc2NTQzMjEwLy4tLCsqKSgnJiU=
此帖子包含附件:
PNG 图像
大小:2,665B
----------------------------------------------
-
作者:
男 itpc1 (itpc1) ▲▲▲▲△ -
普通会员
2018/4/13 13:31:24
7楼: 然后将Pj08Ozo5ODc2NTQzMjEwLy4tLCsqKSgnJiU=在线解密后得>=<;:9876543210/.-,+*)('&%

请问他是如何实现这样的编码和解码的呢?
此帖子包含附件:
PNG 图像
大小:5.2K
----------------------------------------------
-
作者:
男 wang_80919 (Flying Wang) ★☆☆☆☆ -
普通会员
2018/4/13 13:42:10
8楼: 5 楼就是答案 爱信不信。
----------------------------------------------
(C)(P)Flying Wang
作者:
男 keymark (嬲) ▲▲▲△△ -
普通会员
2018/4/13 14:05:03
9楼: 加密解密
10.2.3平台对string处理
不兼容老程序

也就是说2007下编译 加密的 不能在10.2.3解   除非你针对ansi(很多国家)    unicode处理 
这程序用来演示  对string双byte  用老算法(ansichar)(byte)
此帖子包含附件:keymark_20184131453.zip 大小:80.9K
----------------------------------------------
[alias]  co = clone --recurse-submodules  up = submodule update --init --recursiveupd = pullinfo = statusrest = reset --hard懒鬼提速https://www.cctry.com/>http://qalculate.github.io/downloads.htmlhttps://www.cctry.com/
作者:
男 crystalmoon (crystalmoon) ★☆☆☆☆ -
盒子活跃会员
2018/4/13 14:41:23
10楼: 楼上的如果不会用新的TEncoding,就不要推说是10.x的不兼容。选弄明白string的编码,学会用了TEncoding,再来说吧。


至于楼主的问题,你没有想过它的程序本身就是不标准的?
5楼就是答案,如果不放心,你用在线的base加密解密去试试就知道。
----------------------------------------------
-
作者:
男 keymark (嬲) ▲▲▲△△ -
普通会员
2018/4/13 14:57:59
11楼: 你非得10.2.3上的string转 到2007下去解 然后转成ansi或者  (tnt)unicode我也无能为力..  要么用最新要么都用最老的.
----------------------------------------------
[alias]  co = clone --recurse-submodules  up = submodule update --init --recursiveupd = pullinfo = statusrest = reset --hard懒鬼提速https://www.cctry.com/>http://qalculate.github.io/downloads.htmlhttps://www.cctry.com/
作者:
男 wang_80919 (Flying Wang) ★☆☆☆☆ -
普通会员
2018/4/13 15:02:39
12楼: 我对楼上的语文,完全不懂。我怀疑我的体育老师是火星来的。居然一个火星体育老师还教我们语文。

Edit2.Text:=UTF8Decode(EncodeString(Edit1.Text));
这是 D7 写法。

到了 10.2.3
Edit2.Text := TNetEncoding.Base64.EncodeBytesToString(TEncoding.UTF8.GetBytes(Edit1.Text));
不过呢 EMB 默认就是 UTF8
所以可以简写为
Edit2.Text := TNetEncoding.Base64.Encode(Edit1.Text);

这代码 和 上面 D7 的写法完全兼容。
----------------------------------------------
(C)(P)Flying Wang
作者:
男 keymark (嬲) ▲▲▲△△ -
普通会员
2018/4/13 15:07:42
12楼: 如果lz的  程序是标准的那么 除了来源 处理流程(码表) (ansi,unicode,utf*,gbk.*,)不然怎么会不一样?
----------------------------------------------
[alias]  co = clone --recurse-submodules  up = submodule update --init --recursiveupd = pullinfo = statusrest = reset --hard懒鬼提速https://www.cctry.com/>http://qalculate.github.io/downloads.htmlhttps://www.cctry.com/
作者:
男 earthsbest (全能中间件) ▲▲▲▲△ -
普通会员
2018/4/13 16:13:03
13楼: 测试了下,好像可以。
此帖子包含附件:
PNG 图像
大小:12.7K
----------------------------------------------
Delphi4Linux Delphi三层/FireDAC 技术群:734515869 http://www.cnblogs.com/rtcmw
作者:
男 iamdream (银河恒久远,梦想无止境!) ★☆☆☆☆ -
大贡献会员
2018/4/13 16:29:04
13楼: Base64就是把二进制数据用64个可打印字符来表示而已,虽然有比较标准的映射表,但你可以用一个不同于别人的映射表。
----------------------------------------------
-广袤璀璨的银河,永无止境的梦想(梦无止境游银河) 博客挂了……
作者:
男 itpc1 (itpc1) ▲▲▲▲△ -
普通会员
2018/4/13 20:44:19
14楼: earthsbest 请问你这个非标准BASE64加解密具体是怎么实现的呢?
----------------------------------------------
-
作者:
男 earthsbest (全能中间件) ▲▲▲▲△ -
普通会员
2018/4/14 9:58:12
15楼: 先对字符串加密,然后再 base64.Encode,反之,先 base64.Decode,然后解密,这个加密解密很简单,就是 5 楼说的那样。下周一我发算法给你吧。
----------------------------------------------
Delphi4Linux Delphi三层/FireDAC 技术群:734515869 http://www.cnblogs.com/rtcmw
作者:
男 itpc1 (itpc1) ▲▲▲▲△ -
普通会员
2018/4/14 20:34:09
16楼: @15楼的 大牛 earthsbest 在此先谢谢你啦
----------------------------------------------
-
作者:
男 earthsbest (全能中间件) ▲▲▲▲△ -
普通会员
2018/4/16 9:08:38
17楼: 粗略测试下,包含中、英文以及点符号组合的字符串经过base64结果和楼主提供的程序一致。
此帖子包含附件:earthsbest_20184169837.zip 大小:928.5K
----------------------------------------------
Delphi4Linux Delphi三层/FireDAC 技术群:734515869 http://www.cnblogs.com/rtcmw
作者:
男 earthsbest (全能中间件) ▲▲▲▲△ -
普通会员
2018/4/16 9:12:12
18楼: procedure Convertor(var Bytes: TBytes);
var
  I: Integer;
begin
  for I := 0 to High(Bytes) do
    Bytes[I] := 64 - (Bytes[I] - 63);
end;

function Base64Encode(const Input: string): string;
var
  Bytes: TBytes;
begin
  Bytes := TEncoding.ANSI.GetBytes(Input);
  Convertor(Bytes);
  Result := TNetEncoding.Base64.EncodeBytesToString(Bytes);
end;

function Base64Decode(const Input: string): string;
var
  Bytes: TBytes;
begin
  Bytes := TNetEncoding.Base64.DecodeStringToBytes(Input);
  Convertor(Bytes);
  Result := TEncoding.ANSI.GetString(Bytes);
end;
----------------------------------------------
Delphi4Linux Delphi三层/FireDAC 技术群:734515869 http://www.cnblogs.com/rtcmw
作者:
男 itpc1 (itpc1) ▲▲▲▲△ -
普通会员
2018/4/16 11:37:18
19楼: earthsbest 谢谢你
----------------------------------------------
-
信息
登陆以后才能回复
Copyright © 2CCC.Com 盒子论坛 v3.0.1 版权所有 页面执行160.1563毫秒 RSS