delphi 加密 XOR
From http://www.delphigeist.com/2009/09/text-encryption-with-xor.html
Text encryption with XOR
In order to do that we need some helper functions like transforming the string to it's hex representation after encryption so we don't loose any characters plus it looks very good:
function StringToHexStr(const value: string): string;
begin
SetLength(Result, Length(value) *2);
if Length(value) > 0 then
BinToHex(PChar(value), PChar(Result), Length(value));
end; function HexStrToString(const value: string): string;
begin
SetLength(Result, Length(value) div 2);
if Length(value) > 0 then
HexToBin(PChar(value), PChar(Result), Length(value));
end;
ok... now we need a hash function so we hash our password string
function hashKey(const Key: String): Integer;
var
Index: Integer;
begin
Result := 0;;
for Index := 1 to Length(Key) do
Result := ((Result shl 7) or (Result shr 25)) + Ord(Key[Index]);
end;
Note that you can use any hash functions you like as long as it's result type is Cardinal or Integer(unsigned long or signed long) this hash function is taken from (RemObjects Software) PascalScript's "uPSUtils.pas" unit, now we need the algorithm
function __encrypt(const Key, Source: String): String;
// this function should not be used directly
// use EncryptText and DecryptText
const
szBuffer = SizeOf(Integer); (* 4 bytes *)
szByteBuffer = SizeOf(Byte); (* 1 byte *)
var
byteBuffer,
buffer,
index,
theKey: Integer;
StreamOut,
StreamIn: TStringStream;
begin
(* hash the key and store it on local integer variable *)
theKey := hashKey(Key);
(* create two TStringStream's:
- one for the actual data
- the other one for the encrypted/decrypted data *)
StreamIn := TStringStream.Create(Source);
StreamOut := TStringStream.Create('');
(* make sure position is set to ZERO !! *)
StreamIn.Position := 0;
StreamOut.Position := 0; (* now loop WHILE number of bytes read is less than
number of total bytes AND the difference between
position and size is greater or equal to szBuffer
which is 4 bytes *)
while (StreamIn.Position < StreamIn.Size) and
((StreamIn.Size -StreamIn.Position) >= szBuffer) do begin
(* read 4 bytes at a time into a local integer variable *)
StreamIn.ReadBuffer(buffer, szBuffer);
(* the XOR encryption/decryption *)
buffer := buffer xor theKey;
buffer := buffer xor $E0F;
(* write data to output stream *)
StreamOut.WriteBuffer(buffer, szBuffer);
end; (* check if we have some bytes left, there's a fat
chance we do... *)
if (StreamIn.Size -StreamIn.Position) >= 1 then
for index := StreamIn.Position to StreamIn.Size -1 do begin
(* we should have 1, 2 or 3 bytes left MAX, so we
read 1 byte at a time *)
StreamIn.ReadBuffer(byteBuffer, szByteBuffer);
(* the XOR encryption/decryption *)
byteBuffer := byteBuffer xor $F;
(* write data to output stream *)
StreamOut.WriteBuffer(byteBuffer, szByteBuffer);
end; (* set output stream's postion to ZERO so we can
read it's data *)
StreamOut.Position := 0;
(* read data from output stream and return it's value *)
Result := StreamOut.ReadString(StreamOut.Size); (* free allocated memory *)
FreeAndNil(StreamIn);
FreeAndNil(StreamOut);
end;
the encryption and decryption functions
(* this function should be used ONLY for encryption *)
function EncryptText(const Key, Source: String): String;
begin
(* return the encrypted data *)
Result := __encrypt(Key, Source);
(* convert string to hex string *)
Result := StringToHexStr(Result);
end; (* this function should be used ONLY for decryption *)
function DecryptText(const Key, Source: String): String;
begin
(* convert each hex string to string *)
Result := HexStrToString(Source);
(* return the decrypted data *)
Result := __encrypt(Key, Result);
end;
Here's the encryption result of string "http://delphigeist.blogspot.com"
124CE8194017B30D1F54EC01135FF900094CB20B1657FB1A0A57E8476C6062
delphi 加密 XOR的更多相关文章
- DELPHI加密字串(异或运算加密)
首先有两个自定的转换函数: function myStrToHex(s:string):string; //字串转16进制 var TmpStr:string; i:integer; begin Tm ...
- Delphi加密解密算法
// 加密方法一(通过密钥加密解密)function EncryptString(Source, Key: string): string;function UnEncryptString(Sourc ...
- python访问互联网
1.python有一个网络包urllib,里面有很多网络模块,其中我们常用的就是urllib.request (module)这个模块 2.引入要是用的模块:import urllib.request ...
- delphi简单单向字符串加密函数
delphi用久了有的时候得给密码加密一下,简单点就行了,这个函数还是不错的. const XorKey:array[0..7] of Byte=($B2,$09,$AA,$55,$93,$6D,$8 ...
- 从网上整理的一些delphi字符串加密解密方法
function Encode(Str: string): string; var //加密 TmpChr: AnsiChar; i, Len: integer; begin Result := St ...
- Delphi字符串加密/解密
unit uEncrypt_Decrypt; interface uses SysUtils; const XorKey: array[0..7] of Byte = ($B2, $09, ...
- Delphi编写的等长加密与解密
最近在看一本关于网络游戏服务端开发的书,虽然该书是个空架子,里面没有多少实际的内容(此书评价不好),但其中关于等长加密与解密的代码还是有一定的借鉴作用的.他山之石,可以攻玉.因为书中是C++的代码,所 ...
- java和delphi共用的des加密解密
java: import antlr.StringUtils;import org.jeecgframework.core.util.StringUtil; import java.security. ...
- 透过 Delphi 使用二进位金钥做 AES 加密.
从 1994 年开始,笔者就开始接触加密与网路安全的世界,从鲁立忠老师的指导当中获益良多,后来在台湾的元智大学就读研究所的时候,也以此为研究主题. 在当时,电子商务是显学,Visa跟 Master C ...
随机推荐
- python 取整
1.向下取整 向下取整直接用内建的 int() 函数即可: >>> a = 3.75 >>> int(a) 3 2.四舍五入 对数字进行四舍五入用 round() ...
- C语言命令行解析函数:getopt/getopt_long
命令行工具下的参数选项有两种,长选项和短选项.短选项以-开头,后面跟单个字母:长选项以--开头,后面可跟多个字母. 一. getopt() 1.功能:解析命令行短选项参数 2.函数原型: #inclu ...
- oracle mysql sql serve where in 语句的不同
类似这样的语句在mysql oracle 是可以执行成功的, select * from classfirst where (classid ,classname) not in (select c ...
- 使用EntityFramework6完成增删查改CRUD和事务
使用EntityFramework6完成增删查改和事务 上一节我们已经学习了如何使用EF连接MySQL数据库,并简单演示了一下如何使用EF6对数据库进行操作,这一节我来详细讲解一下. 使用EF对数据库 ...
- tomcat源码阅读之生命周期(LifeCycle)
一.事件机制流程: 1. 当外部事件源发生事件(比如点击了按钮,数据发生改变更新等)时,事件源将事件封装成事件对象Event: 2. 将事件对象交由对应的事件派发器Dispatcher ...
- Oracle GI 日志收集工具 - TFA 简介
转载自:https://blogs.oracle.com/Database4CN/entry/tfa_collector_%E4%BB%8B%E7%BB%8D 1.TFA的目的: TFA是个11.2版 ...
- velocity 知识点
velocity 教程: http://www.51gjie.com/javaweb/126 velocity 语法 语法 说明 关键字以#开头 定义数组 ['aaa','bbb'] 变量以$开头 把 ...
- UOJ 393 【NOI2018】归程——可持久化并查集
题目:http://uoj.ac/problem/393 题解:https://www.cnblogs.com/HocRiser/p/9368067.html 但过不了 UOJ 的 hack 数据.不 ...
- 二分法查找 (Binary Search)
二分法查找适用于排列有序的数据.java实现方法如下: // Find the location of a value in array a // Array a must be sorted // ...
- Spring Boot 整合 FastDFS 客户端
原文地址:Spring Boot 整合 FastDFS 客户端 博客地址:http://www.extlight.com 一.前言 前两篇介绍整体上介绍了通过 Nginx 和 FastDFS 的整合来 ...