从网上整理的一些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 ...
随机推荐
- java开发过程问题及解决
1.junit做测试时候报异常: junit.framework.AssertionFailedError: No tests found in com.mq.original.OriginalMqP ...
- JavaScript高级程序设计学习(一)之介绍
作为一名web开发人员,日常用的最多的就是js,也就是大名鼎鼎的ECMAScript,又称javascript.再次声明js与java除了语法上相似,没有半毛钱关系.据说之所以叫javascript, ...
- VUE2 第五天学习--过渡效果
阅读目录 1.理解VUE---过渡效果 回到顶部 1.理解VUE---过渡效果 1. 过渡的-css-类名会有4个(css) 类名在 enter/leave 在过渡中切换.1. v-enter: 进入 ...
- centos7搭建filebeat
filebeat的环境搭建 cd /home/elk wget https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-6.2.4 ...
- centos7搭建elasticsearch
Elasticsearch:负责日志检索和分析,它的特点有:分布式,零配置,自动发现,索引自动分片,索引副本机制,restful风格接口,多数据源,自动搜索负载等 Logstash:对日志进行收集.过 ...
- source 和sh 区别
sh新建一个子shell进程,变量在主shell中无法获取 source在当前shell中执行脚本,变量在主shell即当前shell中可以获取 例子: 1.新建一个test.sh脚本,内容为:A=1 ...
- HDU1233(Kruskal&Prim两解)
https://vjudge.net/problem/HDU-1233 还是畅通工程 某省调查乡村交通状况,得到的统计表中列出了任意两村庄间的距离.省政府“畅通工程”的目标是使全省任何两个村庄间都可以 ...
- POJ2387(dijkstra堆优化)
Til the Cows Come Home Bessie is out in the field and wants to get back to the barn to get as much s ...
- Luogu3320 SDOI2015 寻宝游戏 链并
传送门 可以发现从哪里开始的最优答案都是一样的.我们只需要用一种比较好维护的方法维护答案就好了. 我们考虑用$dfs$序加上$set$维护链并.先预处理$dfs$序,将当前有宝藏的点丢入$set$中, ...
- Luogu P4317 花神的数论题
也是一道不错的数位DP,考虑先转成二进制后再做 转化一下问题,考虑统计出\([1,n]\)中在二进制下有\(i\)个\(1\)的方案数\(cnt_i\),那么答案显然就是\(\prod i^{cnt_ ...