// 加密方法一(通过密钥加密解密)
function EncryptString(Source, Key: string): string;
function UnEncryptString(Source, Key: string): string;
//加密方法二(通过移位加密解密)
function Encode(Str: string): string;
function Decode(Str: string): string;
//加密方法三(异或加密解密)
function Enc(str: string): string;
function Dec(str: string): string;

---------------

function TFrmRegister.EncryptString(Source, Key: string): string;
// 对字符串加密(Source:源 Key:密匙)
var
KeyLen: integer;
KeyPos: integer;
Offset: integer;
Dest: string;
SrcPos: integer;
SrcAsc: integer;
Range: integer;
begin
KeyLen := Length(Key);
if KeyLen = 0 then
Key := 'delphi';
KeyPos := 0;
Range := 256;
randomize;
Offset := random(Range);
Dest := format('%1.2x', [Offset]);
for SrcPos := 1 to Length(Source) do
begin
SrcAsc := (Ord(Source[SrcPos]) + Offset) mod 255;
if KeyPos < KeyLen then
KeyPos := KeyPos + 1
else
KeyPos := 1;
SrcAsc := SrcAsc xor Ord(Key[KeyPos]);
Dest := Dest + format('%1.2x', [SrcAsc]);
Offset := SrcAsc;
end;
result := Dest;
end;

---------------

function TFrmRegister.UnEncryptString(Source, Key: string): string;
// 对字符串解密(Src:源 Key:密匙)
var
KeyLen: integer;
KeyPos: integer;
Offset: integer;
Dest: string;
SrcPos: integer;
SrcAsc: integer;
TmpSrcAsc: integer;
begin
KeyLen := Length(Key);
if KeyLen = 0 then
Key := 'delphi';
KeyPos := 0;
Offset := strtoint('$' + copy(Source, 1, 2));
SrcPos := 3;
repeat
SrcAsc := strtoint('$' + copy(Source, SrcPos, 2));
if KeyPos < KeyLen then
KeyPos := KeyPos + 1
else
KeyPos := 1;
TmpSrcAsc := SrcAsc xor Ord(Key[KeyPos]);
if TmpSrcAsc <= Offset then
TmpSrcAsc := 255 + TmpSrcAsc - Offset
else
TmpSrcAsc := TmpSrcAsc - Offset;
Dest := Dest + chr(TmpSrcAsc);
Offset := SrcAsc;
SrcPos := SrcPos + 2;
until SrcPos >= Length(Source);
result := Dest;
end;

----------------

function TFrmRegister.Decode(Str: string): string;
var
TmpChr: AnsiChar;
i, Len: Integer;
begin
Result := Str;
len := Length(Result);
TmpChr := result[len];
for i := Len downto 2 do
begin
Result[i] := result[i - 1];
Result[1] := TmpChr;
end;
end;

function TFrmRegister.Encode(Str: string): string;
var
TmpChr: AnsiChar;
i, Len: Integer;
begin
Result := Str;
len := Length(Result);
TmpChr := result[1];
for i := 1 to len - 1 do
begin
Result[i] := result[i + 1];
Result[len] := TmpChr;
end;
end;

---------

XorKey: array[0..7] of Byte = ($B2, $09, $AA, $55, $93, $6D, $84, $47);

function TFrmRegister.Enc(str: string): string;
var
i, j: Integer;
begin
Result := '';
j := 0;
for i := 1 to Length(str) do
begin
Result := Result + IntToHex(Byte(str[i]) xor XorKey[j], 2);
j := (j + 1) mod 8;
end;
end;

function TFrmRegister.Dec(str: string): string;
var
i, j: Integer;
begin
Result := '';
j := 0;
for i := 1 to Length(str) div 2 do
begin
Result := Result + Char(StrToInt('$' + Copy(str, i * 2 - 1, 2)) xor
XorKey[j]);
j := (j + 1) mod 8;
end;
end;

=====================2014-08-22整理后如下=========================

  1. unit UMiMaApi;
  2.  
  3. interface
  4.  
  5. uses System.Classes, System.SysUtils;
  6.  
  7. /// <summary>
  8. /// 经过测试此类的方法通常仅仅支持英文和符号,不支持中文,通常密码也只能英文无法中文
  9. /// </summary>
  10. type TMiMaApi = class
  11. const
  12. XorKey: array[0..7] of Byte = ($B2, $09, $AA, $55, $93, $6D, $84, $47);
  13. public
  14. /// <summary>
  15. /// 加密方法一(通过密钥加密解密),对字符串加密(Source:源 Key:密匙)
  16. /// </summary>
  17. function JiaMiByMiYao(ASource, AKey: string): string;
  18. function JieMiByMiYao(ASource, AKey: string): string;
  19.  
  20. /// <summary>
  21. /// 加密方法二(通过移位加密解密)
  22. /// </summary>
  23. function JiaMiByYiWei(AStr: string): string;
  24. function JieMiByYiWei(AStr: string): string;
  25.  
  26. /// <summary>
  27. /// 加密方法三(异或加密解密)
  28. /// </summary>
  29. function JiaMiByYiHuo(AStr: string): string;
  30. function JieMiByYiHuo(AStr: string): string;
  31. end;
  32.  
  33. implementation
  34.  
  35. function TMiMaApi.JiaMiByMiYao(ASource, AKey: string): string;
  36. var
  37. KeyLen: integer;
  38. KeyPos: integer;
  39. Offset: integer;
  40. Dest: string;
  41. SrcPos: integer;
  42. SrcAsc: integer;
  43. Range: integer;
  44. begin
  45. KeyLen := Length(AKey);
  46. if KeyLen = 0 then
  47. begin
  48. AKey := 'delphi';
  49. end;
  50. KeyPos := 0;
  51. Range := 256;
  52. randomize;
  53. Offset := random(Range);
  54. Dest := format('%1.2x', [Offset]);
  55. for SrcPos := 1 to Length(ASource) do
  56. begin
  57. SrcAsc := (Ord(ASource[SrcPos]) + Offset) mod 255;
  58. if KeyPos < KeyLen then
  59. begin
  60. KeyPos := KeyPos + 1;
  61. end else begin
  62. KeyPos := 1;
  63. end;
  64. SrcAsc := SrcAsc xor Ord(AKey[KeyPos]);
  65. Dest := Dest + format('%1.2x', [SrcAsc]);
  66. Offset := SrcAsc;
  67. end;
  68. Result := Dest;
  69. end;
  70.  
  71. function TMiMaApi.JieMiByMiYao(ASource, AKey: string): string;
  72. var
  73. KeyLen: integer;
  74. KeyPos: integer;
  75. Offset: integer;
  76. Dest: string;
  77. SrcPos: integer;
  78. SrcAsc: integer;
  79. TmpSrcAsc: integer;
  80. begin
  81. KeyLen := Length(AKey);
  82. if KeyLen = 0 then
  83. begin
  84. AKey := 'delphi';
  85. end;
  86. KeyPos := 0;
  87. Offset := strtoint('$' + copy(ASource, 1, 2));
  88. SrcPos := 3;
  89. repeat
  90. SrcAsc := strtoint('$' + copy(ASource, SrcPos, 2));
  91. if KeyPos < KeyLen then
  92. begin
  93. KeyPos := KeyPos + 1;
  94. end else begin
  95. KeyPos := 1;
  96. end;
  97. TmpSrcAsc := SrcAsc xor Ord(AKey[KeyPos]);
  98. if TmpSrcAsc <= Offset then
  99. begin
  100. TmpSrcAsc := 255 + TmpSrcAsc - Offset;
  101. end else begin
  102. TmpSrcAsc := TmpSrcAsc - Offset;
  103. end;
  104. Dest := Dest + chr(TmpSrcAsc);
  105. Offset := SrcAsc;
  106. SrcPos := SrcPos + 2;
  107. until SrcPos >= Length(ASource);
  108. Result := Dest;
  109. end;
  110.  
  111. function TMiMaApi.JiaMiByYiWei(AStr: string): string;
  112. var
  113. TmpChr: Char;
  114. i,Len: Integer;
  115. begin
  116. Result := AStr;
  117. len := Length(Result);
  118. TmpChr := result[1];
  119. for i := 1 to len - 1 do
  120. begin
  121. Result[i] := result[i + 1];
  122. Result[len] := TmpChr;
  123. end;
  124. end;
  125.  
  126. function TMiMaApi.JieMiByYiWei(AStr: string): string;
  127. var
  128. TmpChr: Char;
  129. i,Len: Integer;
  130. begin
  131. Result := AStr;
  132. len := Length(Result);
  133. TmpChr := result[len];
  134. for i := Len downto 2 do
  135. begin
  136. Result[i] := result[i - 1];
  137. Result[1] := TmpChr;
  138. end;
  139. end;
  140.  
  141. function TMiMaApi.JiaMiByYiHuo(AStr: string): string;
  142. var
  143. i,j: Integer;
  144. begin
  145. Result := '';
  146. j := 0;
  147. for i := 1 to Length(AStr) do
  148. begin
  149. Result := Result + IntToHex(Byte(AStr[i]) xor XorKey[j], 2);
  150. j := (j + 1) mod 8;
  151. end;
  152. end;
  153.  
  154. function TMiMaApi.JieMiByYiHuo(AStr: string): string;
  155. var
  156. i,j: Integer;
  157. begin
  158. Result := '';
  159. j := 0;
  160. for i := 1 to Length(AStr) div 2 do
  161. begin
  162. Result := Result + Char(StrToInt('$' + Copy(AStr, i * 2 - 1, 2)) xor
  163. XorKey[j]);
  164. j := (j + 1) mod 8;
  165. end;
  166. end;
  167.  
  168. end.

delphi 自己用的加密解密算法的更多相关文章

  1. 兼容javascript和C#的RSA加密解密算法,对web提交的数据进行加密传输

    Web应用中往往涉及到敏感的数据,由于HTTP协议以明文的形式与服务器进行交互,因此可以通过截获请求的数据包进行分析来盗取有用的信息.虽然https可以对传输的数据进行加密,但是必须要申请证书(一般都 ...

  2. 一组PHP可逆加密解密算法

    对于大部分密码加密,我们可以采用md5.sha1等方法.可以有效防止数据泄露,但是这些方法仅适用于无需还原的数据加密. 对于需要还原的信息,则需要采用可逆的加密解密算法. 下面一组PHP函数是实现此加 ...

  3. RC4加密解密算法

    RC4相对是速度快.安全性高的加密算法.在实际应用中,我们可以对安全系数要求高的文本进行多重加密,这样破解就有一定困难了.如下测试给出了先用RC4加密,然后再次用BASE64编码,这样双重锁定,保证数 ...

  4. java 实现 DES加密 解密算法

    DES算法的入口参数有三个:Key.Data.Mode.其中Key为8个字节共64位,是DES算法的工作密钥:Data也为8个字节64位,是要被加密或被解密的数据:Mode为DES的工作方式,有两种: ...

  5. 数据的加密传输——单片机上实现TEA加密解密算法

    各位大侠在做数据传输时,有没有考虑过把数据加密起来进行传输,若在串口或者无线中把所要传的数据加密起来,岂不是增加了通信的安全性.常用的加密解密算法比如DES.RSA等,受限于单片机的内存和运算速度,实 ...

  6. md5加密以及可逆的加密解密算法

    md5加密 package gov.mof.fasp2.gcfr.adjustoffset.adjust; import java.security.MessageDigest; public cla ...

  7. N个整数(数的大小为0-255)的序列,把它们加密为K个整数(数的大小为0-255).再将K个整数顺序随机打乱,使得可以从这乱序的K个整数中解码出原序列。设计加密解密算法,且要求K<=15*N.

    N个整数(数的大小为0-255)的序列,把它们加密为K个整数(数的大小为0-255).再将K个整数顺序随机打乱,使得可以从这乱序的K个整数中解码出原序列.设计加密解密算法,且要求K<=15*N. ...

  8. RSA加密解密算法

    /** * RSA加密解密算法 * Class Rsa */ class Rsa { /** * 获取pem格式的公钥 * @param $public_key 公钥文件路径或者字符串 * @retu ...

  9. php与java通用AES加密解密算法

    AES指高级加密标准(Advanced Encryption Standard),是当前最流行的一种密码算法,在web应用开发,特别是对外提供接口时经常会用到,下面是我整理的一套php与java通用的 ...

  10. 一个经典的PHP加密解密算法

    项目中有时我们需要使用PHP将特定的信息进行加密,也就是通过加密算法生成一个加密字符串,这个加密后的字符串可以通过解密算法进行解密,便于程序对解密后的信息进行处理.最常见的应用在用户登录以及一些API ...

随机推荐

  1. 三、mycat实验数据

    系列导航 一.Mycat实战---为什么要用mycat 二.Mycat安装 三.mycat实验数据 四.mycat垂直分库 五.mycat水平分库 六.mycat全局自增 七.mycat-ER分片 最 ...

  2. vue3常用 Composition API

    1.拉开序幕的setup 理解:Vue3.0中一个新的配置项,值为一个函数. setup是所有Composition API(组合API)" 表演的舞台 ". 组件中所用到的:数据 ...

  3. 【D3 API 中文手册】

    https://blog.csdn.net/tianxuzhang/article/details/47067699?utm_medium=distribute.pc_relevant.none-ta ...

  4. spring boot 中WebMvcConfigurer相关使用总结

    本文为博主原创,未经允许不得转载: WebMvcConfigurer 为spring boot中的一个接口,用来配置web相关的属性或工具插件,比如消息转换器,拦截器,视图处理器,跨域设置等等. 在S ...

  5. 03-MySQL字段的数据类型

    前言 MySQL 中的字段,主要有四种数据类型: 整型(整数) 小数 字符串类型 时间日期类型 下面来详细讲一讲. 整数类型 整数类型的分类 MySQL中,整型有五种: 迷你整型:tinyint,使用 ...

  6. 【Mysql系列】(一)MySQL语句执行流程

    首发博客地址 首发博客地址 系列文章地址 参考文章 MySQL 逻辑架构 连接器 连接命令一般是这么写的 mysql -h$ip -P$port -u$user -p 那么 什么是连接器? MySQL ...

  7. [转帖]巧用 Docker Buildx 构建多种系统架构镜像

    http://www.taodudu.cc/news/show-4511396.html?action=onClick Docker Buildx 是一个 Docker CLI 插件,其扩展了 Doc ...

  8. 自建邮箱服务器 EwoMail 发送邮件的办法

    总结来源: http://doc.ewomail.com/docs/ewomail/changguipeizhi 1. 首先这个机器不能安装dovecot等软件,不然安装脚本会失败. 2. 下载安装文 ...

  9. awk中的NR,FNR ,NF,$NF,RS,ORS,FS,OFS

    awk中的NR,FNR ,NF,$NF,RS,ORS,FS,OFS https://www.cnblogs.com/zhangqingsh/archive/2013/04/24/3040801.htm ...

  10. kubernetes中不可见的OOM

    最近看了一篇文章:Tracking Down "Invisible" OOM Kills in Kubernetes,其讲述的是由于内存不足导致Pod中的进程被killed,但Po ...