delphi 自己用的加密解密算法
// 加密方法一(通过密钥加密解密)
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整理后如下=========================
unit UMiMaApi; interface uses System.Classes, System.SysUtils; /// <summary>
/// 经过测试此类的方法通常仅仅支持英文和符号,不支持中文,通常密码也只能英文无法中文
/// </summary>
type TMiMaApi = class
const
XorKey: array[0..7] of Byte = ($B2, $09, $AA, $55, $93, $6D, $84, $47);
public
/// <summary>
/// 加密方法一(通过密钥加密解密),对字符串加密(Source:源 Key:密匙)
/// </summary>
function JiaMiByMiYao(ASource, AKey: string): string;
function JieMiByMiYao(ASource, AKey: string): string; /// <summary>
/// 加密方法二(通过移位加密解密)
/// </summary>
function JiaMiByYiWei(AStr: string): string;
function JieMiByYiWei(AStr: string): string; /// <summary>
/// 加密方法三(异或加密解密)
/// </summary>
function JiaMiByYiHuo(AStr: string): string;
function JieMiByYiHuo(AStr: string): string;
end; implementation function TMiMaApi.JiaMiByMiYao(ASource, AKey: string): string;
var
KeyLen: integer;
KeyPos: integer;
Offset: integer;
Dest: string;
SrcPos: integer;
SrcAsc: integer;
Range: integer;
begin
KeyLen := Length(AKey);
if KeyLen = 0 then
begin
AKey := 'delphi';
end;
KeyPos := 0;
Range := 256;
randomize;
Offset := random(Range);
Dest := format('%1.2x', [Offset]);
for SrcPos := 1 to Length(ASource) do
begin
SrcAsc := (Ord(ASource[SrcPos]) + Offset) mod 255;
if KeyPos < KeyLen then
begin
KeyPos := KeyPos + 1;
end else begin
KeyPos := 1;
end;
SrcAsc := SrcAsc xor Ord(AKey[KeyPos]);
Dest := Dest + format('%1.2x', [SrcAsc]);
Offset := SrcAsc;
end;
Result := Dest;
end; function TMiMaApi.JieMiByMiYao(ASource, AKey: string): string;
var
KeyLen: integer;
KeyPos: integer;
Offset: integer;
Dest: string;
SrcPos: integer;
SrcAsc: integer;
TmpSrcAsc: integer;
begin
KeyLen := Length(AKey);
if KeyLen = 0 then
begin
AKey := 'delphi';
end;
KeyPos := 0;
Offset := strtoint('$' + copy(ASource, 1, 2));
SrcPos := 3;
repeat
SrcAsc := strtoint('$' + copy(ASource, SrcPos, 2));
if KeyPos < KeyLen then
begin
KeyPos := KeyPos + 1;
end else begin
KeyPos := 1;
end;
TmpSrcAsc := SrcAsc xor Ord(AKey[KeyPos]);
if TmpSrcAsc <= Offset then
begin
TmpSrcAsc := 255 + TmpSrcAsc - Offset;
end else begin
TmpSrcAsc := TmpSrcAsc - Offset;
end;
Dest := Dest + chr(TmpSrcAsc);
Offset := SrcAsc;
SrcPos := SrcPos + 2;
until SrcPos >= Length(ASource);
Result := Dest;
end; function TMiMaApi.JiaMiByYiWei(AStr: string): string;
var
TmpChr: Char;
i,Len: Integer;
begin
Result := AStr;
len := Length(Result);
TmpChr := result[1];
for i := 1 to len - 1 do
begin
Result[i] := result[i + 1];
Result[len] := TmpChr;
end;
end; function TMiMaApi.JieMiByYiWei(AStr: string): string;
var
TmpChr: Char;
i,Len: Integer;
begin
Result := AStr;
len := Length(Result);
TmpChr := result[len];
for i := Len downto 2 do
begin
Result[i] := result[i - 1];
Result[1] := TmpChr;
end;
end; function TMiMaApi.JiaMiByYiHuo(AStr: string): string;
var
i,j: Integer;
begin
Result := '';
j := 0;
for i := 1 to Length(AStr) do
begin
Result := Result + IntToHex(Byte(AStr[i]) xor XorKey[j], 2);
j := (j + 1) mod 8;
end;
end; function TMiMaApi.JieMiByYiHuo(AStr: string): string;
var
i,j: Integer;
begin
Result := '';
j := 0;
for i := 1 to Length(AStr) div 2 do
begin
Result := Result + Char(StrToInt('$' + Copy(AStr, i * 2 - 1, 2)) xor
XorKey[j]);
j := (j + 1) mod 8;
end;
end; end.
delphi 自己用的加密解密算法的更多相关文章
- 兼容javascript和C#的RSA加密解密算法,对web提交的数据进行加密传输
Web应用中往往涉及到敏感的数据,由于HTTP协议以明文的形式与服务器进行交互,因此可以通过截获请求的数据包进行分析来盗取有用的信息.虽然https可以对传输的数据进行加密,但是必须要申请证书(一般都 ...
- 一组PHP可逆加密解密算法
对于大部分密码加密,我们可以采用md5.sha1等方法.可以有效防止数据泄露,但是这些方法仅适用于无需还原的数据加密. 对于需要还原的信息,则需要采用可逆的加密解密算法. 下面一组PHP函数是实现此加 ...
- RC4加密解密算法
RC4相对是速度快.安全性高的加密算法.在实际应用中,我们可以对安全系数要求高的文本进行多重加密,这样破解就有一定困难了.如下测试给出了先用RC4加密,然后再次用BASE64编码,这样双重锁定,保证数 ...
- java 实现 DES加密 解密算法
DES算法的入口参数有三个:Key.Data.Mode.其中Key为8个字节共64位,是DES算法的工作密钥:Data也为8个字节64位,是要被加密或被解密的数据:Mode为DES的工作方式,有两种: ...
- 数据的加密传输——单片机上实现TEA加密解密算法
各位大侠在做数据传输时,有没有考虑过把数据加密起来进行传输,若在串口或者无线中把所要传的数据加密起来,岂不是增加了通信的安全性.常用的加密解密算法比如DES.RSA等,受限于单片机的内存和运算速度,实 ...
- md5加密以及可逆的加密解密算法
md5加密 package gov.mof.fasp2.gcfr.adjustoffset.adjust; import java.security.MessageDigest; public cla ...
- N个整数(数的大小为0-255)的序列,把它们加密为K个整数(数的大小为0-255).再将K个整数顺序随机打乱,使得可以从这乱序的K个整数中解码出原序列。设计加密解密算法,且要求K<=15*N.
N个整数(数的大小为0-255)的序列,把它们加密为K个整数(数的大小为0-255).再将K个整数顺序随机打乱,使得可以从这乱序的K个整数中解码出原序列.设计加密解密算法,且要求K<=15*N. ...
- RSA加密解密算法
/** * RSA加密解密算法 * Class Rsa */ class Rsa { /** * 获取pem格式的公钥 * @param $public_key 公钥文件路径或者字符串 * @retu ...
- php与java通用AES加密解密算法
AES指高级加密标准(Advanced Encryption Standard),是当前最流行的一种密码算法,在web应用开发,特别是对外提供接口时经常会用到,下面是我整理的一套php与java通用的 ...
- 一个经典的PHP加密解密算法
项目中有时我们需要使用PHP将特定的信息进行加密,也就是通过加密算法生成一个加密字符串,这个加密后的字符串可以通过解密算法进行解密,便于程序对解密后的信息进行处理.最常见的应用在用户登录以及一些API ...
随机推荐
- proxy代理
- Go 汇编学习笔记
0.前言 学习 Go 离不开看源码,源码又包含大量汇编代码,离开汇编是学不好 Go 的.同样,离开汇编去学习计算机是不完整的,汇编是基石,是离操作系统和硬件最近的一层. 虽然之前学过一点 Go 汇编, ...
- [java] - 获取上传到服务器上的文件路径
request.getSession().getServletContext().getRealPath("upload/" );
- Linux-软件包管理-rpm-yum-apt
- [转帖]GB18030 编码
https://www.qqxiuzi.cn/zh/hanzi-gb18030-bianma.php GB18030编码采用单字节.双字节.四字节分段编码方案,具体码位见下文.GB18030向下兼容G ...
- [转帖]tidb backup
https://docs.pingcap.com/zh/tidb/v4.0/sql-statement-restore BACKUP 语句使用的引擎与 BR 相同,但备份过程是由 TiDB 本身驱动, ...
- FIO的再学习-不同Raid,不同磁盘性能验证
FIO的再学习-不同Raid性能验证 背景 发现自己对iodepth的和num_jobs的理解存在偏差 找了一些资料才发现自己很多地方做的不对. 这里找到一个新资料可以进行模拟数据库的测试 测试配置文 ...
- [转帖]spec2017 安装和使用
https://zhuanlan.zhihu.com/p/534205632 SPEC成立于1988年,SPEC基准广泛用于评估计算机系统的性能.SPEC CPU套件通过测量几个程序(例如编译器GCC ...
- CentOS7升级Glibc到超过2.17版本无法启动的解决办法
CentOS7升级Glibc到超过2.17版本无法启动的解决办法 背景 今天有同事告知服务器宕机无法启动. 提示信息为: [sda] Assuming drive cache: write throu ...
- 巧用GenericObjectPool创建自定义对象池
作者:京东物流 高圆庆 1 前言 通常一个对象创建.销毁非常耗时的时候,我们不会频繁的创建和销毁它,而是考虑复用.复用对象的一种做法就是对象池,将创建好的对象放入池中维护起来,下次再用的时候直接拿池中 ...