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 ...
随机推荐
- 三、mycat实验数据
系列导航 一.Mycat实战---为什么要用mycat 二.Mycat安装 三.mycat实验数据 四.mycat垂直分库 五.mycat水平分库 六.mycat全局自增 七.mycat-ER分片 最 ...
- vue3常用 Composition API
1.拉开序幕的setup 理解:Vue3.0中一个新的配置项,值为一个函数. setup是所有Composition API(组合API)" 表演的舞台 ". 组件中所用到的:数据 ...
- 【D3 API 中文手册】
https://blog.csdn.net/tianxuzhang/article/details/47067699?utm_medium=distribute.pc_relevant.none-ta ...
- spring boot 中WebMvcConfigurer相关使用总结
本文为博主原创,未经允许不得转载: WebMvcConfigurer 为spring boot中的一个接口,用来配置web相关的属性或工具插件,比如消息转换器,拦截器,视图处理器,跨域设置等等. 在S ...
- 03-MySQL字段的数据类型
前言 MySQL 中的字段,主要有四种数据类型: 整型(整数) 小数 字符串类型 时间日期类型 下面来详细讲一讲. 整数类型 整数类型的分类 MySQL中,整型有五种: 迷你整型:tinyint,使用 ...
- 【Mysql系列】(一)MySQL语句执行流程
首发博客地址 首发博客地址 系列文章地址 参考文章 MySQL 逻辑架构 连接器 连接命令一般是这么写的 mysql -h$ip -P$port -u$user -p 那么 什么是连接器? MySQL ...
- [转帖]巧用 Docker Buildx 构建多种系统架构镜像
http://www.taodudu.cc/news/show-4511396.html?action=onClick Docker Buildx 是一个 Docker CLI 插件,其扩展了 Doc ...
- 自建邮箱服务器 EwoMail 发送邮件的办法
总结来源: http://doc.ewomail.com/docs/ewomail/changguipeizhi 1. 首先这个机器不能安装dovecot等软件,不然安装脚本会失败. 2. 下载安装文 ...
- 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 ...
- kubernetes中不可见的OOM
最近看了一篇文章:Tracking Down "Invisible" OOM Kills in Kubernetes,其讲述的是由于内存不足导致Pod中的进程被killed,但Po ...