Delphi编写的等长加密与解密

加解密单元
作者:张超
}
unit uCrypt;
uses
Windows, SysUtils;
C1 = 52845;
C2 = 22719;
CryptKey = 72957;
function Decrypt(Source: array of Byte; var Dest: array of Byte; Len: Cardinal): BOOL; overload;
function Decrypt(Source: String; var Dest: string): BOOL; overload;
function Decrypt(Source: Pchar; Dest: PChar; Len: Cardinal): BOOL; overload;
var
i: Integer;
Key: Integer;
begin
Key:=CryptKey;
if (not Assigned(Source)) or (not Assigned(Dest)) or (Len <=0) then
begin
Result:=False;
end;
for i:=0 to Len - 1 do
begin
Dest[i]:=Char(Byte(Source[i]) xor (Key shr 8));
Key:=(Byte(Dest[i]) + Key) * C1 + C2;
end;
end;
var
i: Integer;
Key: Integer;
PrevBlock: Byte;
begin
Key:=CryptKey;
if (not Assigned(Source)) or (not Assigned(Dest)) or (Len <=0) then
begin
Result:=False;
end;
for i:=0 to Len - 1 do
begin
PrevBlock:=Byte(Source[i]);
Dest[i]:=Char(Byte(Source[i]) xor (Key shr 8));
Key:=(Byte(PrevBlock) + Key) * C1 + C2;
end;
end;
begin
Result:=False;
begin
SetLength(Dest, Length(Source));
Encrypt(PChar(Source), PChar(Dest), Length(Source));
Result:=True;
end;
end;
begin
Result:=False;
begin
SetLength(Dest, Length(Source));
Decrypt(PChar(Source), PChar(Dest), Length(Source));
Result:=True;
end;
end;
var
i: Integer;
Key: Integer;
begin
Key:=CryptKey;
if Len <= 0 then
begin
Result:=False;
end;
for i:=0 to Len - 1 do
begin
Dest[i]:=Source[i] xor (Key shr 8);
Key:=(Dest[i] + Key) * C1 + C2;
end;
end;
var
i: Integer;
PrevBlock: Byte;
Key: Integer;
begin
Key:=CryptKey;
if (Len <= 0) then
begin
Result:=False;
end;
for i:=0 to Len - 1 do
begin
PrevBlock:=Source[i];
Dest[i]:=Source[i] xor (Key shr 8);
Key:=(PrevBlock + Key) * C1 + C2;
end;
end;
Delphi编写的等长加密与解密的更多相关文章
- [Swift通天遁地]七、数据与安全-(17)使用Swift实现原生的3DES加密和解密
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★➤微信公众号:山青咏芝(shanqingyongzhi)➤博客园地址:山青咏芝(https://www.cnblogs. ...
- OD学习笔记10:一个VB程序的加密和解密思路
前边,我们的例子中既有VC++开发的程序,也有Delphi开发的程序,今天我们给大家分析一个VB程序的加密和解密思路. Virtual BASIC是由早期DOS时代的BASIC语言发展而来的可视化编程 ...
- 分享一次C#调用Delphi编写Dll程序
1.前言: 最近接手了一个项目需要和Delphi语言编写的一个系统进行一些接口的对接,数据在传输过程中采用Des加密方式,因为Delphi 平台的加密方式和C#平台的加密方式不互通,所以采用的方式是C ...
- C# 网络加密与解密
数据在网络传输过程中的保密性是网络安全中重点要考虑的问题之一.由于通过网络传递数据是在不安全的信道上进行传输的,因此通信双方要想确保任何可能正在侦听的人无法理解通信的内容,而且希望确保接收方接收的信息 ...
- 关于《加密与解密》的读后感----对dump脱壳的一点思考
偶然翻了一下手机日历,原来今天是夏至啊,时间过的真快.ISCC的比赛已经持续了2个多月了,我也跟着比赛的那些题目学了2个月.......虽然过程很辛苦,但感觉还是很幸运的,能在大三的时候遇到ISCC, ...
- Java实现文件的加密与解密
最近在做一个项目,需要将资源文件(包括图片.动画等类型)进行简单的加密后再上传至云上的服务器,而在应用程序中对该资源使用前先将读取到的文件数据进行解密以得到真正的文件信息.此策略的原因与好处是将准备好 ...
- Java Base64加密、解密原理Java代码
Java Base64加密.解密原理Java代码 转自:http://blog.csdn.net/songylwq/article/details/7578905 Base64是什么: Base64是 ...
- JS URL 使用base64加密与解密
JS编码方式: <script type="text/javascript"> document.write(encodeURI("http://www.w3 ...
- 基于私钥加密公钥解密的RSA算法C#实现
RSA算法是第一个能同时用于加密和数字签名的算法,也易于理解和操作. RSA是被研究得最广泛的公钥算法,从提出到现在已近二十年,经历了各种攻击的考验,逐渐为人们接受,普遍认为是目前最优秀的公钥方案之一 ...
随机推荐
- es中的相关知识一(基本知识和id的定义)
一.es中文档的元数据包括: 1._index: 索引(index)类似于关系型数据库里的数据库(database),事实上,我们的数据被存储和索引在分片(shards)中,索引知识把一个或多个分片分 ...
- oracle之约束-主键、非空、唯一、check、外键、默认
--首先添加主键约束alter table studentadd constraint PK_student_sno primary key(sno) --删除约束alter table studen ...
- oracle之函数-数字,日期,转换,字符串,其他
-----------------------------oracle数据库函数----------------------------------------数学函数***select abs(-1 ...
- Qt 之 qInstallMessageHandler(日志重定向至文件)
Qt 日志重定向到文件 #include <QCoreApplication> #include <QDebug> #include <QMutex> #inclu ...
- HDU 6052 - To my boyfriend | 2017 Multi-University Training Contest 2
说实话不是很懂按题解怎么写,思路来源于 http://blog.csdn.net/calabash_boy/article/details/76272704?yyue=a21bo.50862.2018 ...
- CSS权重;慎用!important
初初接触样式的前端开发者在碰到样式覆盖时,最先选择的往往是!important. 但是这种做法不好,应该优先考虑从样式的级联属性或者位置来解决问题. 切记以下情况永远不要使用!important: 1 ...
- 【csp模拟赛1】不服来战 (challenge.cpp)
[题目描述] 最近小 Z 和他的朋友都迷上了一款手机游戏:不服来战. 游戏的设定十分简单,在游戏开始时,会给出一排共 N 个灯,有的灯是开着 的有的是关着的,每个灯都有一个分数.而玩家可以进行任意次操 ...
- Python基础面试题整理
基础 Python中lambda是什么意思 Python中的pass是什么意思 作为解释型语言,Python如何运行 什么是Python的单元测试 在Python中unittest是什么 如何将数字转 ...
- elastic search&logstash&kibana 学习历程(四)kibana安装部署和使用
kibana在linux上的部署安装 运行环境是centos7 基于jdk8 下载安装包:wget https://artifacts.elastic.co/downloads/kibana/kiba ...
- mysql保留最新数据
直接上sql语句,亲测可用: DELETE tb FROM lotus_system_log AS tb ,(SELECT pk_id FROM lotus_system_log ORDER BY p ...