从网上整理的一些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中try catch finally语句中含有return语句的执行情况(总结版)
在这里看到了try >但有一点是可以肯定的,finally块中的内容会先于try中的return语句执行,如果finall语句块中也有return语句的话,那么直接从finally中返回了,这也 ...
- (转) Ubuntu 更改文件夹及子文件夹权限
Linux系统下如何修改文档及文件夹(含子文件夹)权限,我们来看一下. 一 介绍: 可以使用命令chmod来为文件或目录赋予权限.Linux/Unix 的档案存取权限分为三级 : 档案拥有者.群组.其 ...
- Deep Learning(深度学习)学习笔记整理系列之(一)(转)
Deep Learning(深度学习)学习笔记整理系列 zouxy09@qq.com http://blog.csdn.net/zouxy09 作者:Zouxy version 1.0 2013-0 ...
- CF1146 Forethought Future Cup Elimination Round Tutorial
CF1146 Forethought Future Cup Elimination Round Tutorial 叮,守夜冠军卡 https://codeforces.com/blog/entry/6 ...
- [HNOI2018]排列[堆]
题意 给定一棵树,每个点有点权,第 \(i\) 个点被删除的代价为 \(w_{p[i]}\times i\) ,问最小代价是多少. 分析 与国王游戏一题类似. 容易发现权值最小的点在其父亲选择后就会立 ...
- [SHOI2008]cactus仙人掌图[圆方树+树dp]
题意 求仙人掌的直径(相距最远的两个点的距离). \(n\le 5\times 10^4\) 分析 建立圆方树,讨论答案路径的 lca 在圆点还是方点. 利用树形 dp 求出每个圆点到 不同子树内圆 ...
- 理解标准盒模型和怪异模式&box-sizing属性
盒子模型 主要有两种,w3c标准盒模型,IE下的怪异盒模型,其实还有就是弹性盒模型(上篇文章我们用他很好的解决了对齐问题) DTD规范 盒模型分为:标准w3c盒模型.IE盒模型.以及css中的伸缩盒模 ...
- [UWP 自定义控件]了解模板化控件(9):UI指南
1. 使用TemplateSettings统一外观 TemplateSettings提供一组只读属性,用于在新建ControlTemplate时使用这些约定的属性. 譬如,修改HeaderedCont ...
- CSS 边框(border)实例
CSS 边框(border)实例:元素的边框 (border) 是围绕元素内容和内边距的一条或多条线. CSS border 属性允许你规定元素边框的样式.宽度和颜色. CSS 边框属性属性 描述bo ...
- devstack 安装(centos7)
1. 创建devstack用户 sudo useradd -s /bin/bash -d /opt/stack -m stackecho "stack ALL=(ALL) NOPASSWD: ...