DELPHI加密字串(异或运算加密)

首先有两个自定的转换函数:  

function myStrToHex(s:string):string; //字串转16进制
var
  TmpStr:string;
  i:integer;
begin
  TmpStr:=‘‘;
  for i:=1 to Length(s)do
    TmpStr:=TmpStr+IntToHex(ord(s[i]),2);
  Result:=TmpStr;
end;    

function myHexToStr(S:string):string; //16进制转字串
var
  HexS,TmpStr:string;
  i:Integer;
  a:Byte;
begin
  HexS:=s;
  if Length(HexS) mod 2=1 then
    HexS:=HexS+‘0‘;
  TmpStr:=‘‘;
  for i:=1 to(Length(HexS)div 2)do
  begin
    a:=StrToInt(‘$‘+HexS[2*i-1]+HexS[2*i]);
    TmpStr:=TmpStr+Chr(a);
  end;
  Result:=TmpStr;
end;
function myStrToHex(s:string):string; //字串转16进制
var
  TmpStr:string;
  i:integer;
begin
  TmpStr:=‘‘;
  for i:=1 to Length(s)do
    TmpStr:=TmpStr+IntToHex(ord(s[i]),2);
  Result:=TmpStr;
end;  

function myHexToStr(S:string):string; //16进制转字串
var
  HexS,TmpStr:string;
  i:Integer;
  a:Byte;
begin
  HexS:=s;
  if Length(HexS) mod 2=1 then
    HexS:=HexS+‘0‘;
  TmpStr:=‘‘;
  for i:=1 to(Length(HexS)div 2)do
  begin
    a:=StrToInt(‘$‘+HexS[2*i-1]+HexS[2*i]);
    TmpStr:=TmpStr+Chr(a);
  end;
  Result:=TmpStr;
end;   

然后就是加密、解密函数了:  

{两个函数的参数相同,s为要加密、解密的字串;sKey为密匙}
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:=‘‘; //下面要用到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:=‘‘; //下面要用到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;
{两个函数的参数相同,s为要加密、解密的字串;sKey为密匙}
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:=‘‘; //下面要用到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:=‘‘; //下面要用到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;   

现在已经可以使用了,调用EncryptStr和DecryptStr分别加密、解密  

例:  

[delphi] view plaincopyprint?Edit1.Text:=EncryptStr(‘Hello‘,‘delphi‘);    

////////////////////////////////////////     

Edit1.Text:=DecryptStr(Edit1.Text,‘delphi‘);
Edit1.Text:=EncryptStr(‘Hello‘,‘delphi‘);  

////////////////////////////////////////  

Edit1.Text:=DecryptStr(Edit1.Text,‘delphi‘);

  

时间: 2024-11-01 10:14:12

DELPHI加密字串(异或运算加密)的相关文章

透过 Delphi 使用二进位金钥做 AES 加密.

从 1994 年开始,笔者就开始接触加密与网路安全的世界,从鲁立忠老师的指导当中获益良多,后来在台湾的元智大学就读研究所的时候,也以此为研究主题. 在当时,电子商务是显学,Visa跟 Master Card还特别为了网路交易制作了厚厚三大本的商务通讯协定,命名为SET (Secure Electronic Transaction,安全电子交易),从客户端.商店端.银行端定义了绵绵密密的交易规范. 然而,网际网路的世界跟 Visa Master Card所熟悉的专用网路世界差的远了,不是大狗们(B

异或运算实现加密解密

异或运算中,如果某个字符(或数值)x 与 一个数值m 进行异或运算得到y,则再用y 与 m 进行异或运算就可以还原为 x ,因此应用这个原理可以实现数据的加密解密功能. 异或运算在java中通常有两个比较常用的方法,一个是两个变量的互换(不借助第三个变量),一个便是数据的简单加密解密. 两个变量的互换 java运算中,如果要交换两变量的值,通常的做法就是借助第三个临时变量,然后完成操作. 如 public static void main(String[] args) { int[] arr =

java字串加密及String的各类函数说明

一.字串加密 古罗马皇帝凯撒在打仗时曾经使用过以下方法加密军事情报: 请编写一个程序,使用上述算法加密或解密用户输入的英文字串要求设计思想.程序流程图.源代码.结果截图. 1.程序设计思想 先定义字符串,之后输入字符串,算出字符串的长度,用for循环进行字符串的加密,运用ASCLL码表,进行加密,如果是xyz就减23,XYZ同理,其余的就正常加3,最后将加密的字符加到一个空的String类型的成员上,最后输出结果. 2.程序流程图 3.源代码 import java.util.Scanner;

使用异或运算对数据及文件进行加密处理,附软件及源码

前几天写了一篇文章是在C语言中使用异或运算交换两个任意类型变量,其基础为使用^交换两个整数的算法: a ^= b; b ^= a; a ^= b; 如果你看明白这个算法,就会发现这样的规律:一个数异或另一个数两次后,该数保持不变.即: c = a^b; c = c^b; c == a; 这一规律就是使用异或运算对数据及文件进行加密处理的基本原理. 那就先贴下加密算法的代码: bool XorEncrypt(void* bufPtr, unsigned int bufSize, const cha

Java字串加密

古罗马皇帝凯撒在打仗时曾经使用过以下方法加密军事情报:  请编写一个程序,使用上述算法加密或解密用户输入的英文字串. package 字串加密; import javax.swing.JOptionPane; public class Password { public static void main(String args[]) { String password; password = JOptionPane.showInputDialog("请输入要加密或者要破解的字符串:")

使用MD5將字串加密 C# VS2005 Sample Code

MD5的加密已經出來很長一段時間了,也不是什麼特別的新技術,寫這篇的用意也有點像是給自己的一個Note,畢竟加密的功能不常用,最多寫成一個Class,未來去呼叫就好,怕自己也會忘記,所以把這個寫下來. 初步的UI設定如下: H執行是單純加密,而Salt執行則是跑Salted Hash的動作. 單純加密比較不好,如果被人猜到加密方法是採MD5,也沒有Salted,那會風險會高一點,而Salt的效果,因為多了一個Value去加密,除了前面的都要猜到外,還要知道Salted Value才可以.而Sal

CBrother异或加密与C++异或加密函数

CBrother脚本异或加密与C++异或加密函数 异或对于数据加密来说是最简单的方式,在一般的安全性要求不是非常高的地方,异或加密是最好的选择. C++异或加密代码 1 int g_PWD = 0xffee00aa; //密码 2 void XORBuf(char *data,int len) 3 { 4 int *buf = (int *)data; 5 int num = len >> 2;//够4个字节的按整形异或 6 for (int i = 0 ; i < num ; i++)

Delphi RSA加解密【 (RSA公钥加密,私钥解密)、(RSA私钥加密,公钥解密)、MD5加密、SHA加密】

作者QQ:(648437169) delphi RSA加解密 [Delphi RSA加解密]支持 (RSA公钥加密,私钥解密).(RSA私钥加密,公钥解密).MD5加密.SHA1加密.SHA224加密.SHA256加密.SHA384加密.SHA512加密 原文地址:https://www.cnblogs.com/zhimamaigua/p/11003504.html

我的Android进阶之旅------&gt;Android采用AES+RSA的加密机制对http请求进行加密

前言 未加密的抓包截图 加密之后的抓包截图 基本需求及概念 AES算法 AES基本原理及算法流程 AES算法流程 RSA算法 RSA算法基本原理及流程 RSA算法实现流程 AES与RSA相结合数据加密方案 Android端 AESRSA结合实践 基本要求 基本流程 Android端 服务器端 java版示例 更多参考 前言 最近维护公司APP应用的登录模块,由于测试人员用Fiddler抓包工具抓取到了公司关于登录时候的明文登录信息.虽然使用的是HTTPS的方式进行http请求的,但还是被Fidd