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位运算加密
创建一个类,通过位运算中的”^"异或运算符把字符串与一个指定的值进行异或运算,从而改变字符串每个字符的值,这样就可以得到一个加密后的字符串.当把加密后的字符串作为程序输入内容,再与那个指定的 ...
随机推荐
- 一个基于jQuery的简单树形菜单
在工作中的项目使用的是一个前端基于 jQuery easyui 的一个系统,其中左侧的主菜单使用的是 easyui 中的 tree 组件,不是太熟悉,不过感觉不是太好用. 比如 easyui 中的 t ...
- HDU 3038 How Many Answers Are Wrong 很有意思的一道并查集问题
题目大意:TT 和 FF玩游戏(名字就值五毛),有一个数列,数列有N个元素,现在给出一系列个区间和该区间内各个元素的和,如果后出现的一行数据和前面一出现的数据有矛盾,则记录下来.求有矛盾数据的数量. ...
- Android学习之Service(1)--->Started方式
界面退出后进程程序还在运行,不会被杀死,如音乐播发器.后台下载等 注:本文只讨论Started方式 main.xml代码分析 <?xml version="1.0" enco ...
- [其他]volatile 关键字
用 volatile 关键字修饰函数 的作用是 告诉编译器该函数不会返回 , 让编译器能产生更好的代码 另外也能避免一些假警告信息,如未初始化的变量等
- log4cxx入门第一篇--一个小例子
先看官网:http://logging.apache.org/log4cxx/index.html 转载自:http://wenku.baidu.com/view/d88ab5a9d1f34693da ...
- JAVA基础--正则表达式
. any character \d A digit 0-9 \D a non-digit [^0-9] \s a whitespace character, 空白字符 \S a non-w ...
- Python正则表达式,统计分析nginx访问日志
目标: 1.正则表达式 2.oop编程,统计nginx访问日志中不同IP地址出现的次数并排序 1.正则表达式 #!/usr/bin/env python # -*- coding: utf-8 -*- ...
- 对于形式参数只能用final修饰符,其它任何修饰符都会引起编译器错误
在Java中修饰符总共有一下几种: 1.访问控制修饰符 分别有:public private protected,缺省 2.其它修饰符 分别有:abstract,final,stati ...
- NodeJs-- 新建项目实例
安装Nodejs: 下载地址:http://nodejs.org 设置环境变量,例如我将nodejs装在D:/program文件夹下,则设以下为系统环境变量 D:\Program\nodejs 安装E ...
- PHP 多线程、多进程
多线程:PHP其实并不支持多线程,只是通过一些扩展或者socket方式伪装成多线程,实质不是的.在PHP 5.3 以上版本,使用 pthreads PHP扩展,可以使PHP真正地支持多线程:或者使用 ...