function 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

Result[i] := Result[i + 1];

Result[Len] := TmpChr;

end;

function 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

Result[i] := Result[i - 1];

Result[1] := TmpChr;

end;

{异或 加密解密}

const // 首先定义一个常量数组

XorKey: array[0..7] of Byte = ($B2, $91, $AA, $55, $93, $6D, $84, $47); //字符串加密用

//数组的值可以自己改

function 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 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;

function Crypt(s: string; Key: Word;

const bEncrypt: boolean): string;

const

SeedA = 787; ///   常量,你可以修改

SeedB = 787; ///   常量,你可以修改

var

i: integer;

ps, pr: ^byte;

begin

if bEncrypt then

s := s + #0;

SetLength(Result, Length(s));

ps := @s[1];

pr := @Result[1];

for i := 1 to length(s) do

begin

pr^ := ps^ xor (Key shr 8);

if bEncrypt then

Key := (pr^ + Key) * SeedA + SeedB

else

Key := (ps^ + Key) * SeedA + SeedB;

pr := pointer(integer(pr) + 1);

ps := pointer(integer(ps) + 1);

end;

end;

///////////////////

function EncrypStr(Src, Key: string): string; //字符串加密函数

//对字符串加密(Src:源 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(Src) do

begin

SrcAsc := (Ord(Src[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 UncrypStr(Src, 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(src, 1, 2));

SrcPos := 3;

repeat

SrcAsc := StrToInt('$' + copy(src, 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(Src);

Result := Dest;

end;

//********************************************************

//             加密解密 (利用异或运算)    (方式2)

//********************************************************

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 := '';

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 := '';

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;

没有一个个去研究,调试。以后在时间在慢慢试。

(完)

从网上整理的一些delphi字符串加密解密方法的更多相关文章

  1. Delphi字符串加密/解密

    unit uEncrypt_Decrypt;   interface   uses SysUtils;   const XorKey: array[0..7] of Byte = ($B2, $09, ...

  2. C# 字符串加密解密方法

    这个是加密的算法的命名空间,使用加密算法前要引用该程序集  System.Security.Cryptography using System;using System.Data;using Syst ...

  3. C# 常用字符串加密解密方法

    using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Sec ...

  4. java字符串加密解密

    java字符串加密解密 字符串加密解密的方式很多,每一种加密有着相对的解密方法.下面要说的是java中模拟php的pack和unpack的字符串加密解密方法. java模拟php中pack: /** ...

  5. C# 字符串加密解密函数

    原文:C# 字符串加密解密函数 using System; using System.Text;using System.Security.Cryptography; using System.IO; ...

  6. 简单的JavaScript字符串加密解密

    简单的JavaScript字符串加密解密 <div> <input type="text" id="input" autofocus=&quo ...

  7. C#/IOS/Android通用加密解密方法

    原文:C#/IOS/Android通用加密解密方法 公司在做移动端ios/android,服务器提供接口使用的.net,用到加密解密这一块,也在网上找了一些方法,有些是.net加密了android解密 ...

  8. ASP.NET常用加密解密方法

    ASP.NET常用加密解密方法 一.MD5加密解密 1.加密 C# 代码           public static string ToMd5(string clearString)        ...

  9. ios常见加密解密方法

    在其他平台中经常会计算MD5值,在iOS平台中也提供了该方法,首先需要导入头文件 #import <CommonCrypto/CommonDigest.h> 方法CC_MD5可以获取MD5 ...

随机推荐

  1. 在NodeJS中操作文件常见的API

    阅读目录 一:如何读整个文件内容? 二:如何写入整个文件内容? 三:如何在文件中的指定位置处读入内容? 四:如何在文件中的指定位置处写入内容? 五:如何创建与读取目录? 六:如何查看与修改文件或目录的 ...

  2. httpclient原理

    http.tcp/ip和socket的区别,用一个序列图概括最合适 网络上的跨域请求,都是以URL的方式发送请求,后端接收.标准的http请求格式包括header和body,传输到服务端 应用的协议都 ...

  3. spring,springmvc,mybatis整合ssm框架出现ORA-02289:序列不存在问题

    今天整合了一个SSM项目,完了后部署到Tomcat服务器,正常启动.但是当我发送请求时,报错,,如下 报错说序列不存在,可是我明明创建了序列呀,然后我测试了一下,测试语句:select tb_user ...

  4. 分布式计算(五)Azkaban使用

    在安装好Azkaban后,熟悉Azkaban的用法花了较长时间,也踩了一些坑,接下来将详细描述Azkaban的使用过程. 目录 一.界面介绍 二.Projects 1. 创建Command类型单一Jo ...

  5. 7-51单片机ESP8266学习-AT指令(8266TCP服务器,编写自己的C#TCP客户端发信息给单片机控制小灯的亮灭)

    http://www.cnblogs.com/yangfengwu/p/8780182.html 自己都是现做现写,如果想知道最终实现的功能,请看最后 先把源码和资料链接放到这里 链接: https: ...

  6. Luogu P1447 [NOI2010]能量采集

    Preface 最近反演题做多了看什么都想反演.这道题由于数据弱,解法多种多样,这里简单分析一下. 首先转化下题目就是对于一个点\((x,y)\),所消耗的能量就是\(2(\gcd(x,y)-1)+1 ...

  7. Nginx Windows版的服务安装和管理工具

    以前研究过负载均衡,最近正在项目上实施(从来没做过小项目以上级别的东西,哈),nginx挺好,不过Windows有点为难,小流量和本地不追求性能,简单易用是目标. Nginx Windows上并没有提 ...

  8. python常用程序算法

    一.冒泡排序: 1.冒泡排序是将无序的数字排列成从小到大的有序组合: 过程:对相邻的两个元素进行比较,对不符合要求的数据进行交换,最后达到数据有序的过程. 规律: 1.冒泡排序的趟数时固定的:n-1 ...

  9. open-falcon ---客户机agent操作

    open-falcon的agent用于采集机器负载监控指标,比如cpu.idle.load.1min.disk.io.util等等,每隔60秒push给Transfer.agent与Transfer建 ...

  10. Flask使用Flask-SQLAlchemy操作MySQL数据库

    前言: Flask-SQLAlchemy是一个Flask扩展,简化了在Flask程序中使用SQLAlchemy的操作.SQLAlchemy是一个很强大的关系型数据库框架,支持多种数据库后台.SQLAl ...