FireMonky跨平台异或加密解密方法

5bug 2017-12-31 331人围观 ,发现0个评论 FireMonky跨平台异或加密解密Delphi跨平台加密解密算法

在做互联网项目的时候难免会遇到一些要做加密解密的场景,这里给大家分享一个最简单的异或加密解密的方法,老早之前也是网上收集的,做了一些修改,支持FireMonkey跨平台,我的"由由密码管家"app里面也采用了这个算法,具体代码如下:

unit uEncryptString;

interface

uses System.SysUtils;

function EncryptString(const Source: string; Key: string): string;
function DecryptString(const Source: string; Key: string): string;

implementation

const
  PassWordKey = 'www.xuedelphi.com';

function EncryptString(const Source: string; Key: string): string;
// 对字符串加密(Source:源 Key:密匙)
var
  KeyLen: integer;
  KeyPos: integer;
  Offset: integer;
  Dest: string;
  SrcPos: integer;
  SrcAsc: integer;
  Range: integer;
begin
  if Source = '' then
    Exit;
  KeyLen := Length(Key);
  if KeyLen = 0 then
    Key := PassWordKey;
  KeyPos := 0;
  Range := 256;
  randomize;
  Offset := random(Range);
  Dest := format('%1.2x', [Offset]);
{$IF DEFINED(ANDROID) OR (DEFINED(IOS))}
  for SrcPos := 0 to Length(Source) - 1 do
{$ELSE}
  for SrcPos := 1 to Length(Source) do
{$ENDIF}
  begin
    SrcAsc := (Ord(Source[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 DecryptString(const Source: string; Key: string): string;
// 对字符串解密(Src:源 Key:密匙)
var
  KeyLen: integer;
  KeyPos: integer;
  Offset: integer;
  Dest: string;
  SrcPos: integer;
  SrcAsc: integer;
  TmpSrcAsc: integer;
begin
  if Source = '' then
    Exit;
  KeyLen := Length(Key);
  if KeyLen = 0 then
    Key := PassWordKey;
  KeyPos := 0;
  Offset := strtoint('$' + copy(Source, 1, 2));
  SrcPos := 3;
  repeat
    SrcAsc := strtoint('$' + copy(Source, 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(Source);
  result := Dest;
end;

end.


不容错过
Powered By Z-BlogPHP