DELPHI加密字串(异或运算加密)
- 首先有两个自定的转换函数:
- function myStrToHex(s:string):string; //字串转16进制
- var
- TmpStr:string;
- i:integer;
- begin
- TmpStr:='';
- for i:=1 to Length(s)do
- TmpStr:=TmpStr+IntToHex(ord(s[i]),2);
- Result:=TmpStr;
- end;
- function myHexToStr(S:string):string; //16进制转字串
- var
- HexS,TmpStr:string;
- i:Integer;
- a:Byte;
- begin
- HexS:=s;
- if Length(HexS) mod 2=1 then
- HexS:=HexS+'0';
- TmpStr:='';
- for i:=1 to(Length(HexS)div 2)do
- begin
- a:=StrToInt('$'+HexS[2*i-1]+HexS[2*i]);
- TmpStr:=TmpStr+Chr(a);
- end;
- Result:=TmpStr;
- end;
- function myStrToHex(s:string):string; //字串转16进制
- var
- TmpStr:string;
- i:integer;
- begin
- TmpStr:='';
- for i:=1 to Length(s)do
- TmpStr:=TmpStr+IntToHex(ord(s[i]),2);
- Result:=TmpStr;
- end;
- function myHexToStr(S:string):string; //16进制转字串
- var
- HexS,TmpStr:string;
- i:Integer;
- a:Byte;
- begin
- HexS:=s;
- if Length(HexS) mod 2=1 then
- HexS:=HexS+'0';
- TmpStr:='';
- for i:=1 to(Length(HexS)div 2)do
- begin
- a:=StrToInt('$'+HexS[2*i-1]+HexS[2*i]);
- TmpStr:=TmpStr+Chr(a);
- end;
- Result:=TmpStr;
- end;
- 然后就是加密、解密函数了:
- {两个函数的参数相同,s为要加密、解密的字串;sKey为密匙}
- function EncryptStr(const s:string;sKey:string):string; //加密
- var
- i,j:Integer;
- HexS,HexsKey,MidS,TmpStr:string;
- a,b,c:byte;
- begin
- HexS:=myStrToHex(s);
- HexsKey:=myStrToHex(sKey);
- MidS:=HexS;
- for i:=1 to(Length(HexsKey)div 2)do
- begin
- if i<>1 then MidS:=TmpStr;
- TmpStr:=''; //下面要用到TmpStr,所以要清空
- for j:=1 to (Length(MidS)div 2)do
- begin
- a:=StrToInt('$'+midS[2*j-1]+midS[2*j]);
- b:=StrToInt('$'+HexsKey[2*i-1]+HexsKey[2*i]);
- c:=a xor b;
- tmpstr:=TmpStr+myStrToHex(Chr(c));
- end;
- end;
- Result:=TmpStr;
- end;
- function DecryptStr(const s:string;sKey:string):string; //解密
- var
- i,j:Integer;
- HexS,HexsKey,MidS,TmpStr:string;
- a,b,c:Byte;
- begin
- HexS:=s;
- if Length(HexS)mod 2=1 then //检查是否为字符串
- begin
- ShowMessage('密文错误!');
- Exit;
- end;
- HexsKey:=myStrToHex(sKey);
- TmpStr:=HexS;
- MidS:=HexS;
- for i:=(length(HexsKey) div 2) downto 1 do
- begin
- if i<>(length(HexsKey) div 2)then
- MidS:=TmpStr;
- TmpStr:=''; //下面要用到TmpStr,所以要清空
- for j:=1 to(length(MidS) div 2)do
- begin
- a:=StrToInt('$'+MidS[2*j-1]+MidS[2*j]);
- b:=StrToInt('$'+HexsKey[2*i-1]+HexsKey[2*i]);
- c:=a xor b;
- TmpStr := TmpStr+myStrToHex(Chr(c));
- end;
- end;
- Result:=myHexToStr(TmpStr);
- end;
- {两个函数的参数相同,s为要加密、解密的字串;sKey为密匙}
- function EncryptStr(const s:string;sKey:string):string; //加密
- var
- i,j:Integer;
- HexS,HexsKey,MidS,TmpStr:string;
- a,b,c:byte;
- begin
- HexS:=myStrToHex(s);
- HexsKey:=myStrToHex(sKey);
- MidS:=HexS;
- for i:=1 to(Length(HexsKey)div 2)do
- begin
- if i<>1 then MidS:=TmpStr;
- TmpStr:=''; //下面要用到TmpStr,所以要清空
- for j:=1 to (Length(MidS)div 2)do
- begin
- a:=StrToInt('$'+midS[2*j-1]+midS[2*j]);
- b:=StrToInt('$'+HexsKey[2*i-1]+HexsKey[2*i]);
- c:=a xor b;
- tmpstr:=TmpStr+myStrToHex(Chr(c));
- end;
- end;
- Result:=TmpStr;
- end;
- function DecryptStr(const s:string;sKey:string):string; //解密
- var
- i,j:Integer;
- HexS,HexsKey,MidS,TmpStr:string;
- a,b,c:Byte;
- begin
- HexS:=s;
- if Length(HexS)mod 2=1 then //检查是否为字符串
- begin
- ShowMessage('密文错误!');
- Exit;
- end;
- HexsKey:=myStrToHex(sKey);
- TmpStr:=HexS;
- MidS:=HexS;
- for i:=(length(HexsKey) div 2) downto 1 do
- begin
- if i<>(length(HexsKey) div 2)then
- MidS:=TmpStr;
- TmpStr:=''; //下面要用到TmpStr,所以要清空
- for j:=1 to(length(MidS) div 2)do
- begin
- a:=StrToInt('$'+MidS[2*j-1]+MidS[2*j]);
- b:=StrToInt('$'+HexsKey[2*i-1]+HexsKey[2*i]);
- c:=a xor b;
- TmpStr := TmpStr+myStrToHex(Chr(c));
- end;
- end;
- Result:=myHexToStr(TmpStr);
- end;
- 现在已经可以使用了,调用EncryptStr和DecryptStr分别加密、解密
- 例:
- [delphi] view plaincopyprint?Edit1.Text:=EncryptStr('Hello','delphi');
- ////////////////////////////////////////
- Edit1.Text:=DecryptStr(Edit1.Text,'delphi');
- Edit1.Text:=EncryptStr('Hello','delphi');
- ////////////////////////////////////////
- Edit1.Text:=DecryptStr(Edit1.Text,'delphi');
DELPHI加密字串(异或运算加密)的更多相关文章
- Java实现 LeetCode 535 TinyURL 的加密与解密(位运算加密)
535. TinyURL 的加密与解密 TinyURL是一种URL简化服务, 比如:当你输入一个URL https://leetcode.com/problems/design-tinyurl 时,它 ...
- 【转】Encrypt ConnectionString in Web.Config 【加密ASP.NET web.config数据库链接字串】
原文链接:https://www.codeproject.com/Tips/795135/Encrypt-ConnectionString-in-Web-Config web.config中一般会存放 ...
- 04-String——课后作业1:字串加密
题目:请编写一个程序,加密或解密用户输入的英文字串要求设计思想.程序流程图.源代码.结果截图. 程序设计思想:首先由用户选择是加密还是解密,利用String类中的charAt函数依次取出字串中的字符, ...
- 透过 Delphi 使用二进位金钥做 AES 加密.
从 1994 年开始,笔者就开始接触加密与网路安全的世界,从鲁立忠老师的指导当中获益良多,后来在台湾的元智大学就读研究所的时候,也以此为研究主题. 在当时,电子商务是显学,Visa跟 Master C ...
- java字串加密
字串加密 1.设计思想: (1)加密方法,字符串的每一个字符都代表这个字符往后的第三位,最后三个字符代表,开始的三个字符. (2)解密方法,字符串的每一个字符都代表这个字符往前的第三位,开始三个字符代 ...
- c# 如何利用异或运算进行简单加密解密
利用“^”异或运算对字符串进行加密 原理:按位做“异或”运算是->位值相同得1,不同得0,如下计算 1 ^ 1 = 0 1 ^ 0 = 1 0 ^ 1 = 1 0 ^ 0 = 0 例如: < ...
- 详解XOR(异或)运算加密
逻辑运算之中,除了 AND 和 OR,还有一种 XOR 运算,中文称为"异或运算".它的定义是:两个值相同时,返回false,否则返回true.也就是说,XOR可以用来判断两个值是 ...
- php,js 对字符串按位异或运算加密解密
异或的符号是^.按位异或运算, 对等长二进制模式按位或二进制数的每一位执行逻辑按位异或操作. 操作的结果是如果某位不同则该位为1, 否则该位为0. xor运算的逆运算是它本身,也就是说两次异或同一个数 ...
- Java位运算加密
创建一个类,通过位运算中的”^"异或运算符把字符串与一个指定的值进行异或运算,从而改变字符串每个字符的值,这样就可以得到一个加密后的字符串.当把加密后的字符串作为程序输入内容,再与那个指定的 ...
随机推荐
- android脚步---不同activity之间参数传递
现在有两个activity,一个是mainactivity,一个是detectactivity 后者需要调用前者的一个参数,这里用到了intent getextras(); putextras(); ...
- HDU 4393 Throw nails(优先队列)
优先队列的应用 好坑,好坑,好坑,重要的事情说三遍! #include<iostream> #include<cstdio> #include<cstring> # ...
- Learning Ionic中文版本
最近没有干劲,空闲时间也足,然后找了个比较容易集中精神的事情在做: 翻译<learning ionic> ionic是一个整合angularjs和cordova混合应用开发框架. 它可以通 ...
- dedecms 的这个dede:arclist里怎么调用全局变量?
将{dede:global.cfg_templets_skin/} 写为 [field:global.cfg_templets_skin/] 即可.
- Andriod学习笔记 - 参考
Andriod学习笔记 - 参考 自定义实现圆形播放进度条(android,飞一般的感觉) 盘点Android开发者必备的十大开发工具
- Android学习笔记之Broadcast Receiver
可程序间通信 注册通信,注销通信,发送消息 package com.jiahemeikang.helloandroid; import com.jiahemikang.service.EchoServ ...
- 在Action类中获得HttpServletResponse对象的四种方法
在struts1.xAction类的execute方法中,有四个参数,其中两个就是response和request.而在Struts2中,并没有任何参数,因此,就不能简单地从execute方法获得Ht ...
- P4语言编程快速开始 实践二
参考:P4语言编程快速开始 上一篇系列博客:P4语言编程快速开始 实践二 Demo 2 本Demo所做的修改及实现的功能: 为simple_router添加一个计数器(counter),该计数器附加( ...
- Docker学习小计
1.自动下载并且创建容器 Now verify that the installation has worked by downloading the ubuntu image and launchi ...
- 一起学JUCE之HashMap
基于哈希表的 Map 接口的实现.此实现提供所有可选的映射操作,并允许使用 null 值和 null 键.(除了非同步和允许使用 null 之外,HashMap 类与 Hashtable 大致相同.) ...