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 ...
随机推荐
- ES6必知必会 (一)—— 变量声明和结构赋值
本文章属于个人对es6一些比较常用的语法的总结归纳,其主要参考阮一峰大神的<a href="http://es6.ruanyifeng.com//">ECMAScrip ...
- Memcached 真的过时了吗?
这两年Redis火得可以,Redis也常常被当作Memcached的挑战者被提到桌面上来.关于Redis与Memcached的比较更是比比皆是.然而,Redis真的在功能.性能以及内存使用效率上都超越 ...
- FastAdmin CMS 插件下载
FastAdmin CMS 插件下载 CMS内容管理系统插件(含小程序) 自定义内容模型.自定义单页.自定义表单.自定义会员发布.付费阅读.小程序等 提供全部前后端源代码和小程序源代码 功能特性 基于 ...
- python之 数据类型判定与类型转换
一. 判断数据类型 0.type(x)type()可以接收任何东西作为参数――并返回它的数据类型.整型.字符串.列表.字典.元组.函数.类.模块,甚至类型对象都可以作为参数被 type 函数接受. & ...
- GPU驱动兼容性问题
GPU驱动兼容性问题 问题描述: 将笔记本的GTX860M 的驱动升级到了376.09版本,出现登陆界面,输入密码后黑屏. 解决思路: 由于正常显示登陆窗口,且可以输入密码,基本排除硬件问题和集成显卡 ...
- jmeter自动生成报告
从JMeter 3.0开始已支持自动生成动态报告,我们可以更容易根据生成的报告来完成我们的性能测试报告. 如何生成html测试报告 如果未生成结果文件(.jtl),可运行如下命令生成报告: jmete ...
- [C++ Primer] : 第10章: 泛型算法
概述 泛型算法: 称它们为"算法", 是因为它们实现了一些经典算法的公共接口, 如搜索和排序; 称它们是"泛型的", 是因为它们可以用于不同类型的元素和多种容器 ...
- Dubbo配置优化
来自于:https://blog.csdn.net/youaremoon/article/details/51884644 感谢博主,收藏一下 dubbo作为一个服务治理框架,功能相对比较完善,性能也 ...
- shell打印彩色输出
字体颜色(8种,3开头) 重置=0,黑色=30,红色=31,绿色=32, 黄色=33,蓝色=34, 洋红=35, 青色=36, 白色=37. 背景颜色(8种,4开头) 重置=0,黑色=40,红色=41 ...
- requests-1快速学习
请直接转身官网http://docs.python-requests.org/zh_CN/latest/user/quickstart.html#url](http://docs.python-req ...