从网上整理的一些delphi字符串加密解密方法
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字符串加密解密方法的更多相关文章
- Delphi字符串加密/解密
unit uEncrypt_Decrypt; interface uses SysUtils; const XorKey: array[0..7] of Byte = ($B2, $09, ...
- C# 字符串加密解密方法
这个是加密的算法的命名空间,使用加密算法前要引用该程序集 System.Security.Cryptography using System;using System.Data;using Syst ...
- C# 常用字符串加密解密方法
using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Sec ...
- java字符串加密解密
java字符串加密解密 字符串加密解密的方式很多,每一种加密有着相对的解密方法.下面要说的是java中模拟php的pack和unpack的字符串加密解密方法. java模拟php中pack: /** ...
- C# 字符串加密解密函数
原文:C# 字符串加密解密函数 using System; using System.Text;using System.Security.Cryptography; using System.IO; ...
- 简单的JavaScript字符串加密解密
简单的JavaScript字符串加密解密 <div> <input type="text" id="input" autofocus=&quo ...
- C#/IOS/Android通用加密解密方法
原文:C#/IOS/Android通用加密解密方法 公司在做移动端ios/android,服务器提供接口使用的.net,用到加密解密这一块,也在网上找了一些方法,有些是.net加密了android解密 ...
- ASP.NET常用加密解密方法
ASP.NET常用加密解密方法 一.MD5加密解密 1.加密 C# 代码 public static string ToMd5(string clearString) ...
- ios常见加密解密方法
在其他平台中经常会计算MD5值,在iOS平台中也提供了该方法,首先需要导入头文件 #import <CommonCrypto/CommonDigest.h> 方法CC_MD5可以获取MD5 ...
随机推荐
- 【UOJ 17】飞扬的小鸟
UOJ 17 题意:在\(n\times m\)的网格中有一些柱子,它们可以通过的区间是\((L_i,R_i)\),位置在\(P_i\).在第i个位置点击一次会使高度增加\(X_i\),不点击会使高度 ...
- odoo之带出历史订单产品
这是在sale_origin中下由两张单子{sale_origin_line和history_order} class history_order(osv.osv): _name="hist ...
- CF101D Castle 树形DP、贪心
题目传送门 题意:给出一个有$N$个点的树,你最开始在$1$号点,经过第$i$条边需要花费$w_i$的时间.每条边只能被经过$2$次.求出到达除$1$号点外所有点的最早时间的最小平均值.$N \leq ...
- Bitcoin 使用及配置记录
常用配置 bitcoin-qt.exe -testnet -printtoconsole -conf=D:\Bitcoin\bitcoin.conf -datadir=D:\Bitcoin\Data ...
- 爬虫学习--http请求详解
上篇博客里面写了,爬虫就是发http请求(浏览器里面打开发送的都是http请求),然后获取到response,咱们再从response里面找到想要的数据,存储到本地. 咱们本章就来说一下什么是http ...
- Linux中2>&1使用
转:2>&1使用 一 相关知识 1)默认地,标准的输入为键盘,但是也可以来自文件或管道(pipe |).2)默认地,标准的输出为终端(terminal),但是也可以重定向到文件,管道或后 ...
- 【JVM.1】java内存区域与内存溢出
鲁迅曾说过:Java与C++之间有一堵由内存动态分配和垃圾收集技术所围成的“高墙”,墙外面的人想进来,墙里面的人想出去. 一.虚拟机内存分布 Java虚拟机在执行Java程序的过程中会把它所管理的内存 ...
- EF5.0区别于EF4.0的crud区别
public T AddEntity(T entity) { //EF4.0的写法 添加实体 //db.CreateObjectSet<T>().AddObject(entity); // ...
- db2修改最大连接数
查看当前连接数,sample为数据库名db2 list applications for db sample db2 list applications for db sample show deta ...
- C_数据结构_递归A函数调用B函数
# include <stdio.h> int g(int); int f(int); int f(int n) { ) printf("haha\n"); else ...