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');
转载于:https://www.cnblogs.com/qingsong/p/4033027.html
DELPHI加密字串(异或运算加密)相关推荐
- Java实现 LeetCode 535 TinyURL 的加密与解密(位运算加密)
535. TinyURL 的加密与解密 TinyURL是一种URL简化服务, 比如:当你输入一个URL https://leetcode.com/problems/design-tinyurl 时,它 ...
- 04-String——课后作业1:字串加密
题目:请编写一个程序,加密或解密用户输入的英文字串要求设计思想.程序流程图.源代码.结果截图. 程序设计思想:首先由用户选择是加密还是解密,利用String类中的charAt函数依次取出字串中的字符, ...
- jet mysql连接字符串,关于jet db的连接字串,以及加密后的字串-数据库专栏,SQL Server...
关于jet db的连接字串,以及加密后的字串 问题: 关于jet db的连接字串,以及加密后的字串 ado连接mdb文件的字串如何写? 加密以后如何写? 回答: access数据库加密分3种 以下以a ...
- C 使用异或(xor)加密/解密文件
C 使用异或(XOR)加密/解密文件 之前写过一篇<php 使用异或(XOR)加密/解密文件>,但php执行的速度很慢,因此这次使用C重写,速度有很大的提高. xor_encrypt.c ...
- 透过 Delphi 使用二进位金钥做 AES 加密.
从 1994 年开始,笔者就开始接触加密与网路安全的世界,从鲁立忠老师的指导当中获益良多,后来在台湾的元智大学就读研究所的时候,也以此为研究主题. 在当时,电子商务是显学,Visa跟 Master C ...
- python 字符串加密 唯一数字_python实现字符串加密 生成唯一固定长度字符串
背景 有时候爬虫爬过的url需要进行指纹核对,比如Scrapy就是进行指纹核对,如果是指纹重复则不再爬取.当然在入库的时候我还是需要做一次核对,否则如果爬虫有漏掉,进入数据库就不合适了. 思路 根据S ...
- java ecb加密_AES(Rijndael)算法ECB模式加密
ECB 电子密码本模式:Electronic codebook 每块堵路加密 优点:分块处理 并行处理 缺点:同样的原文得到相同的密文 容易被攻击 java代码: import javax.crypt ...
- 软件与计算机硬件加密,51单片机程序进行软件加密和硬件解密的方法
由于固化在片外EPROM 里的单片机程序容易复制,所以,如不在技术上采取保护措施,则程序中所采用的处理方法易被他人分析仿制.对单片机程序进行加密是一种有效的保护措施,也是一项实用的技术.虽然本身带有E ...
- Python通过异或运算对email地址进行解密与加密
不少网页的email地址出于防止收到垃圾邮件的目的,JS脚本里对email做加密保护,仅当在加载页面时才通过JS脚本解密再渲染出来.查看网页源代码可以发现关键词往往是cfemail,其后是一大串十六进 ...
最新文章
- Linux命令 crontab的理解和使用方法
- UA OPTI501 电磁波4 电介质及其极化
- (*长期更新)软考网络工程师学习笔记——Section 18 计算机硬件基本知识
- count() * ,1,字段 三兄弟
- 在JBoss Fuse / Fabric8 / Karaf中使用Byteman
- Oracle Controlfile控制文件中记录的信息片段sections
- Installshield 文件及文件夹操作
- poj 3310(并查集判环,图的连通性,树上最长直径路径标记)
- 【java】java 新一代垃圾回收器ZGC的探索与实践
- 《游戏大师Chris Crawford谈互动叙事》一1.2 两种思维方式
- c语言程序下三子棋,C语言实现三子棋游戏(初级版)
- JQuery:常用方法一览
- Python 标准库 —— socket(网络编程)
- 关于数据库设计是否需要加入(建立)外键
- 使用Jorm简单的增删查改数据库
- 冷备份实验,裸设备上备份
- centos7使用kubeadm部署k8s集群(使用containerd做运行时)
- 富士施乐Fuji Xerox DocuPrint M255 z 驱动
- empty怎么发音_empty怎么读什么意思
- CentOS 7.6使用Percona XtraBackup 2.4备份恢复MySQL 5.7