1. 首先有两个自定的转换函数:
  2.  
  3. function myStrToHex(s:string):string; //字串转16进制
  4. var
  5. TmpStr:string;
  6. i:integer;
  7. begin
  8. TmpStr:='';
  9. for i:=1 to Length(s)do
  10. TmpStr:=TmpStr+IntToHex(ord(s[i]),2);
  11. Result:=TmpStr;
  12. end;
  13.  
  14. function myHexToStr(S:string):string; //16进制转字串
  15. var
  16. HexS,TmpStr:string;
  17. i:Integer;
  18. a:Byte;
  19. begin
  20. HexS:=s;
  21. if Length(HexS) mod 2=1 then
  22. HexS:=HexS+'0';
  23. TmpStr:='';
  24. for i:=1 to(Length(HexS)div 2)do
  25. begin
  26. a:=StrToInt('$'+HexS[2*i-1]+HexS[2*i]);
  27. TmpStr:=TmpStr+Chr(a);
  28. end;
  29. Result:=TmpStr;
  30. end;
  31. function myStrToHex(s:string):string; //字串转16进制
  32. var
  33. TmpStr:string;
  34. i:integer;
  35. begin
  36. TmpStr:='';
  37. for i:=1 to Length(s)do
  38. TmpStr:=TmpStr+IntToHex(ord(s[i]),2);
  39. Result:=TmpStr;
  40. end;
  41.  
  42. function myHexToStr(S:string):string; //16进制转字串
  43. var
  44. HexS,TmpStr:string;
  45. i:Integer;
  46. a:Byte;
  47. begin
  48. HexS:=s;
  49. if Length(HexS) mod 2=1 then
  50. HexS:=HexS+'0';
  51. TmpStr:='';
  52. for i:=1 to(Length(HexS)div 2)do
  53. begin
  54. a:=StrToInt('$'+HexS[2*i-1]+HexS[2*i]);
  55. TmpStr:=TmpStr+Chr(a);
  56. end;
  57. Result:=TmpStr;
  58. end;
  59.  
  60. 然后就是加密、解密函数了:
  61.  
  62. {两个函数的参数相同,s为要加密、解密的字串;sKey为密匙}
  63. function EncryptStr(const s:string;sKey:string):string; //加密
  64. var
  65. i,j:Integer;
  66. HexS,HexsKey,MidS,TmpStr:string;
  67. a,b,c:byte;
  68. begin
  69. HexS:=myStrToHex(s);
  70. HexsKey:=myStrToHex(sKey);
  71. MidS:=HexS;
  72. for i:=1 to(Length(HexsKey)div 2)do
  73. begin
  74. if i<>1 then MidS:=TmpStr;
  75. TmpStr:=''; //下面要用到TmpStr,所以要清空
  76. for j:=1 to (Length(MidS)div 2)do
  77. begin
  78. a:=StrToInt('$'+midS[2*j-1]+midS[2*j]);
  79. b:=StrToInt('$'+HexsKey[2*i-1]+HexsKey[2*i]);
  80. c:=a xor b;
  81. tmpstr:=TmpStr+myStrToHex(Chr(c));
  82. end;
  83. end;
  84. Result:=TmpStr;
  85. end;
  86.  
  87. function DecryptStr(const s:string;sKey:string):string; //解密
  88. var
  89. i,j:Integer;
  90. HexS,HexsKey,MidS,TmpStr:string;
  91. a,b,c:Byte;
  92. begin
  93. HexS:=s;
  94. if Length(HexS)mod 2=1 then //检查是否为字符串
  95. begin
  96. ShowMessage('密文错误!');
  97. Exit;
  98. end;
  99. HexsKey:=myStrToHex(sKey);
  100. TmpStr:=HexS;
  101. MidS:=HexS;
  102. for i:=(length(HexsKey) div 2) downto 1 do
  103. begin
  104. if i<>(length(HexsKey) div 2)then
  105. MidS:=TmpStr;
  106. TmpStr:=''; //下面要用到TmpStr,所以要清空
  107. for j:=1 to(length(MidS) div 2)do
  108. begin
  109. a:=StrToInt('$'+MidS[2*j-1]+MidS[2*j]);
  110. b:=StrToInt('$'+HexsKey[2*i-1]+HexsKey[2*i]);
  111. c:=a xor b;
  112. TmpStr := TmpStr+myStrToHex(Chr(c));
  113. end;
  114. end;
  115. Result:=myHexToStr(TmpStr);
  116. end;
  117. {两个函数的参数相同,s为要加密、解密的字串;sKey为密匙}
  118. function EncryptStr(const s:string;sKey:string):string; //加密
  119. var
  120. i,j:Integer;
  121. HexS,HexsKey,MidS,TmpStr:string;
  122. a,b,c:byte;
  123. begin
  124. HexS:=myStrToHex(s);
  125. HexsKey:=myStrToHex(sKey);
  126. MidS:=HexS;
  127. for i:=1 to(Length(HexsKey)div 2)do
  128. begin
  129. if i<>1 then MidS:=TmpStr;
  130. TmpStr:=''; //下面要用到TmpStr,所以要清空
  131. for j:=1 to (Length(MidS)div 2)do
  132. begin
  133. a:=StrToInt('$'+midS[2*j-1]+midS[2*j]);
  134. b:=StrToInt('$'+HexsKey[2*i-1]+HexsKey[2*i]);
  135. c:=a xor b;
  136. tmpstr:=TmpStr+myStrToHex(Chr(c));
  137. end;
  138. end;
  139. Result:=TmpStr;
  140. end;
  141.  
  142. function DecryptStr(const s:string;sKey:string):string; //解密
  143. var
  144. i,j:Integer;
  145. HexS,HexsKey,MidS,TmpStr:string;
  146. a,b,c:Byte;
  147. begin
  148. HexS:=s;
  149. if Length(HexS)mod 2=1 then //检查是否为字符串
  150. begin
  151. ShowMessage('密文错误!');
  152. Exit;
  153. end;
  154. HexsKey:=myStrToHex(sKey);
  155. TmpStr:=HexS;
  156. MidS:=HexS;
  157. for i:=(length(HexsKey) div 2) downto 1 do
  158. begin
  159. if i<>(length(HexsKey) div 2)then
  160. MidS:=TmpStr;
  161. TmpStr:=''; //下面要用到TmpStr,所以要清空
  162. for j:=1 to(length(MidS) div 2)do
  163. begin
  164. a:=StrToInt('$'+MidS[2*j-1]+MidS[2*j]);
  165. b:=StrToInt('$'+HexsKey[2*i-1]+HexsKey[2*i]);
  166. c:=a xor b;
  167. TmpStr := TmpStr+myStrToHex(Chr(c));
  168. end;
  169. end;
  170. Result:=myHexToStr(TmpStr);
  171. end;
  172.  
  173. 现在已经可以使用了,调用EncryptStrDecryptStr分别加密、解密
  174.  
  175. 例:
  176.  
  177. [delphi] view plaincopyprint?Edit1.Text:=EncryptStr('Hello','delphi');
  178.  
  179. ////////////////////////////////////////
  180.  
  181. Edit1.Text:=DecryptStr(Edit1.Text,'delphi');
  182. Edit1.Text:=EncryptStr('Hello','delphi');
  183.  
  184. ////////////////////////////////////////
  185.  
  186. Edit1.Text:=DecryptStr(Edit1.Text,'delphi');

  

DELPHI加密字串(异或运算加密)的更多相关文章

  1. Java实现 LeetCode 535 TinyURL 的加密与解密(位运算加密)

    535. TinyURL 的加密与解密 TinyURL是一种URL简化服务, 比如:当你输入一个URL https://leetcode.com/problems/design-tinyurl 时,它 ...

  2. 【转】Encrypt ConnectionString in Web.Config 【加密ASP.NET web.config数据库链接字串】

    原文链接:https://www.codeproject.com/Tips/795135/Encrypt-ConnectionString-in-Web-Config web.config中一般会存放 ...

  3. 04-String——课后作业1:字串加密

    题目:请编写一个程序,加密或解密用户输入的英文字串要求设计思想.程序流程图.源代码.结果截图. 程序设计思想:首先由用户选择是加密还是解密,利用String类中的charAt函数依次取出字串中的字符, ...

  4. 透过 Delphi 使用二进位金钥做 AES 加密.

    从 1994 年开始,笔者就开始接触加密与网路安全的世界,从鲁立忠老师的指导当中获益良多,后来在台湾的元智大学就读研究所的时候,也以此为研究主题. 在当时,电子商务是显学,Visa跟 Master C ...

  5. java字串加密

    字串加密 1.设计思想: (1)加密方法,字符串的每一个字符都代表这个字符往后的第三位,最后三个字符代表,开始的三个字符. (2)解密方法,字符串的每一个字符都代表这个字符往前的第三位,开始三个字符代 ...

  6. c# 如何利用异或运算进行简单加密解密

    利用“^”异或运算对字符串进行加密 原理:按位做“异或”运算是->位值相同得1,不同得0,如下计算 1 ^ 1 = 0 1 ^ 0 = 1 0 ^ 1 = 1 0 ^ 0 = 0 例如: < ...

  7. 详解XOR(异或)运算加密

    逻辑运算之中,除了 AND 和 OR,还有一种 XOR 运算,中文称为"异或运算".它的定义是:两个值相同时,返回false,否则返回true.也就是说,XOR可以用来判断两个值是 ...

  8. php,js 对字符串按位异或运算加密解密

    异或的符号是^.按位异或运算, 对等长二进制模式按位或二进制数的每一位执行逻辑按位异或操作. 操作的结果是如果某位不同则该位为1, 否则该位为0. xor运算的逆运算是它本身,也就是说两次异或同一个数 ...

  9. Java位运算加密

    创建一个类,通过位运算中的”^"异或运算符把字符串与一个指定的值进行异或运算,从而改变字符串每个字符的值,这样就可以得到一个加密后的字符串.当把加密后的字符串作为程序输入内容,再与那个指定的 ...

随机推荐

  1. android脚步---不同activity之间参数传递

    现在有两个activity,一个是mainactivity,一个是detectactivity 后者需要调用前者的一个参数,这里用到了intent  getextras(); putextras(); ...

  2. HDU 4393 Throw nails(优先队列)

    优先队列的应用 好坑,好坑,好坑,重要的事情说三遍! #include<iostream> #include<cstdio> #include<cstring> # ...

  3. Learning Ionic中文版本

    最近没有干劲,空闲时间也足,然后找了个比较容易集中精神的事情在做: 翻译<learning ionic> ionic是一个整合angularjs和cordova混合应用开发框架. 它可以通 ...

  4. dedecms 的这个dede:arclist里怎么调用全局变量?

    将{dede:global.cfg_templets_skin/} 写为 [field:global.cfg_templets_skin/] 即可.

  5. Andriod学习笔记 - 参考

    Andriod学习笔记 - 参考 自定义实现圆形播放进度条(android,飞一般的感觉) 盘点Android开发者必备的十大开发工具

  6. Android学习笔记之Broadcast Receiver

    可程序间通信 注册通信,注销通信,发送消息 package com.jiahemeikang.helloandroid; import com.jiahemikang.service.EchoServ ...

  7. 在Action类中获得HttpServletResponse对象的四种方法

    在struts1.xAction类的execute方法中,有四个参数,其中两个就是response和request.而在Struts2中,并没有任何参数,因此,就不能简单地从execute方法获得Ht ...

  8. P4语言编程快速开始 实践二

    参考:P4语言编程快速开始 上一篇系列博客:P4语言编程快速开始 实践二 Demo 2 本Demo所做的修改及实现的功能: 为simple_router添加一个计数器(counter),该计数器附加( ...

  9. Docker学习小计

    1.自动下载并且创建容器 Now verify that the installation has worked by downloading the ubuntu image and launchi ...

  10. 一起学JUCE之HashMap

    基于哈希表的 Map 接口的实现.此实现提供所有可选的映射操作,并允许使用 null 值和 null 键.(除了非同步和允许使用 null 之外,HashMap 类与 Hashtable 大致相同.) ...