从网上整理的一些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 ...
随机推荐
- Qt+QGis二次开发:打开S-57格式(*.000)电子海图数据,并设置多边形要素的显示风格
不过多的废话了,直接上源码: addChartlayers()方法时“打开海图”按钮的triggered()信号所绑定的槽函数. //添加海图数据小按钮槽函数 void MainWindow::add ...
- Echars折线配置详解
Echars折线配置详解 比如做成如下效果图: 所有的配置如下: var option = { tooltip: { // 提示框 trigger: 'axis', // 触发类型(坐标轴触发) al ...
- MySQL 误操作后如何快速恢复数据~!~!~
基本上每个跟数据库打交道的程序员(当然也可能是你同事)都会碰一个问题,MySQL误操作后如何快速回滚?比如,delete一张表,忘加限制条件,整张表没了.假如这还是线上环境核心业务数据,那这事就闹大了 ...
- odoo学习之弹框显示
按条件隐藏: <xpath expr="//group[1]" position="attributes"> <attribute name= ...
- CF633H Fibonacci-ish II 莫队、线段树、矩阵乘法
传送门 这题除了暴力踩标程和正解卡常数以外是道很好的题目 首先看到我们要求的东西与\(Fibonacci\)有关,考虑矩阵乘法进行维护.又看到\(n \leq 30000\),这告诉我们正解算法其实比 ...
- ASP.NET Core 登录失败。该登录名来自不受信任的域,不能与集成身份验证一起使用。
原文:ASP.NET Core 登录失败.该登录名来自不受信任的域,不能与集成身份验证一起使用. 当进行数据迁移的时候提示 修改appsettings配置连接串的Trusted_Connection ...
- BootStrap学习(5)_多媒体对象&列表组
一.多媒体对象 这些抽象的对象样式用于创建各种类型的组件(比如:博客评论),我们可以在组件中使用图文混排,图像可以左对齐或者右对齐.媒体对象可以用更少的代码来实现媒体对象与文字的混排. .media: ...
- flask_admin 笔记七 扩展功能
高级功能 1,开启CSRF保护 要将CSRF保护添加到由ModelView实例生成的表单中,请通过指定form_base_class参数在ModelView子类中使用SecureForm类: from ...
- Notepad++列编辑
NotePad++列编辑 工具:Notepad++使用说明:在我们的日常工作中,经常会碰到要修改多行记录,一行行去处理会非常浪费人力,这时候列编辑就是一个很好的解决方法,列编辑在进行数据批量操作时是一 ...
- proxy_pass反向代理配置中url后面加不加/的说明
在日常的web网站部署中,经常会用到nginx的proxy_pass反向代理,有一个配置需要弄清楚:配置proxy_pass时,当在后面的url加上了/,相当于是绝对根路径,则nginx不会把loca ...