导航:
论坛 -> 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==
此帖子包含附件: 大小: 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加解密程序。
----------------------------------------------
-
作者:
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打开发现字节都不一样。 之后就各种转码糊弄成一样的了。 看了上面的讨论,才明白发生了什么问题。
----------------------------------------------
-
作者:
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=
此帖子包含附件: 大小: 2,665B
----------------------------------------------
-
作者:
itpc1 (itpc1)
▲▲▲▲△
-
普通会员
2018/4/13 13:31:24
7楼:
然后将Pj08Ozo5ODc2NTQzMjEwLy4tLCsqKSgnJiU=在线解密后得>=<;:9876543210/.-,+*)('&% 请问他是如何实现这样的编码和解码的呢?
此帖子包含附件: 大小: 5.2K
----------------------------------------------
-
作者:
2018/4/13 13:42:10
8楼:
5 楼就是答案 爱信不信。
----------------------------------------------
(C)(P)Flying Wang
作者:
2018/4/13 14:05:03
9楼:
加密解密 10.2.3平台对string处理 不兼容老程序 也就是说2007下编译 加密的 不能在10.2.3解 除非你针对ansi(很多国家) unicode处理 这程序用来演示 对string双byte 用老算法(ansichar)(byte)
----------------------------------------------
[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/
作者:
2018/4/13 14:41:23
10楼:
楼上的如果不会用新的TEncoding,就不要推说是10.x的不兼容。选弄明白string的编码,学会用了TEncoding,再来说吧。 至于楼主的问题,你没有想过它的程序本身就是不标准的? 5楼就是答案,如果不放心,你用在线的base加密解密去试试就知道。
----------------------------------------------
-
作者:
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/
作者:
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
作者:
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/
作者:
2018/4/13 16:13:03
13楼:
测试了下,好像可以。
此帖子包含附件: 大小: 12.7K
----------------------------------------------
Delphi4Linux Delphi三层/FireDAC 技术群:734515869 http://www.cnblogs.com/rtcmw
作者:
2018/4/13 16:29:04
13楼:
Base64就是把二进制数据用64个可打印字符来表示而已,虽然有比较标准的映射表,但你可以用一个不同于别人的映射表。
----------------------------------------------
-广袤璀璨的银河,永无止境的梦想(梦无止境游银河) 博客挂了……
作者:
itpc1 (itpc1)
▲▲▲▲△
-
普通会员
2018/4/13 20:44:19
14楼:
earthsbest 请问你这个非标准BASE64加解密具体是怎么实现的呢?
----------------------------------------------
-
作者:
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 在此先谢谢你啦
----------------------------------------------
-
作者:
2018/4/16 9:08:38
17楼:
粗略测试下,包含中、英文以及点符号组合的字符串经过base64结果和楼主提供的程序一致。
----------------------------------------------
Delphi4Linux Delphi三层/FireDAC 技术群:734515869 http://www.cnblogs.com/rtcmw
作者:
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 谢谢你
----------------------------------------------
-