`
znhyz1
  • 浏览: 158837 次
  • 性别: Icon_minigender_1
  • 来自: 天津
社区版块
存档分类
最新评论

Delphi版RC4加密算法

 
阅读更多
{===============================================================================

 函数名:    Rc4_StrEncrypt()
 描  述:    RC4 Based string encryption
 参  数:   i_Encrypt ——为 1 是加密, 0 是解密(integer类型);
           s_EncryptText ——待加密(解密)的字符串(string类型);
           s_EncryptPassword ——加密(解密)的密码(string类型);
           i_EncryptLevel ——加密级别(范围:1--10;integer类型))

 翻译:        吴间道
 QQ:           93331961
=============================================================================== }
unit Rc4_Unit;

interface
uses
   SysUtils;

   function Rc4_StrEncrypt(i_Encrypt:integer; s_EncryptText,
      s_EncryptPassword:string; i_EncryptLevel:integer = 1):string;
      
implementation

function Rc4_StrEncrypt(i_Encrypt:integer; s_EncryptText,
  s_EncryptPassword:string; i_EncryptLevel:integer = 1):string;
var
  v_EncryptModified, v_EncryptCipher, v_EncryptCipherBy:string;
  i_EncryptCountA, i_EncryptCountB, i_EncryptCountC, i_EncryptCountD,
    i_EncryptCountE, i_EncryptCountF, i_EncryptCountG, i_EncryptCountH,
    v_EncryptSwap:integer;
  av_EncryptBox:array[0..256, 0..2] of integer;

begin
  if (i_Encrypt <> 0) and (i_Encrypt <> 1) then
  begin
    result := '';
  end
  else if (s_EncryptText = '') or (s_EncryptPassword = '') then
  begin
    result := '';
  end
  else
  begin
    if (i_EncryptLevel <= 0) or (Int(i_EncryptLevel) <> i_EncryptLevel) then
      i_EncryptLevel := 1;
    if Int(i_EncryptLevel) > 10 then i_EncryptLevel := 10;
    if i_Encrypt = 1 then
    begin
      for i_EncryptCountF := 0 to i_EncryptLevel do
      begin
        i_EncryptCountG := 0;
        i_EncryptCountH := 0;
        v_EncryptModified := '';
        for i_EncryptCountG := 1 to Length(s_EncryptText) do
        begin
          if i_EncryptCountH = Length(s_EncryptPassword) then
          begin
            i_EncryptCountH := 1;
          end
          else
          begin
            inc(i_EncryptCountH);
          end;
          v_EncryptModified := v_EncryptModified +
            Chr(Ord(s_EncryptText[i_EncryptCountG]) xor
            Ord(s_EncryptPassword[i_EncryptCountH]) xor 255);
        end;
        s_EncryptText := v_EncryptModified;
        i_EncryptCountA := 0;
        i_EncryptCountB := 0;
        i_EncryptCountC := 0;
        i_EncryptCountD := 0;
        i_EncryptCountE := 0;
        v_EncryptCipherBy := '';
        v_EncryptCipher := '';
        v_EncryptSwap := 0;
        for i_EncryptCountA := 0 to 255 do
        begin
          av_EncryptBox[i_EncryptCountA, 1] :=
            Ord(s_EncryptPassword[i_EncryptCountA mod Length(s_EncryptPassword) +
            1]);
          av_EncryptBox[i_EncryptCountA, 0] := i_EncryptCountA;
        end;
        for i_EncryptCountA := 0 to 255 do
        begin
          i_EncryptCountB := (i_EncryptCountB + av_EncryptBox[i_EncryptCountA][0]
            + av_EncryptBox[i_EncryptCountA][1]) mod 256;
          v_EncryptSwap := av_EncryptBox[i_EncryptCountA][0];
          av_EncryptBox[i_EncryptCountA][0] :=
            av_EncryptBox[i_EncryptCountB][0];
          av_EncryptBox[i_EncryptCountB][0] := v_EncryptSwap;
        end;
        for i_EncryptCountA := 1 to Length(s_EncryptText) do
        begin
          i_EncryptCountC := (i_EncryptCountC + 1) mod 256;
          i_EncryptCountD := (i_EncryptCountD +
            av_EncryptBox[i_EncryptCountC][0]) mod 256;
          i_EncryptCountE := av_EncryptBox[(av_EncryptBox[i_EncryptCountC][0] +
            av_EncryptBox[i_EncryptCountD][0]) mod 256][0];
          v_EncryptCipherBy := inttostr(Ord(s_EncryptText[i_EncryptCountA]) xor
            i_EncryptCountE);
          v_EncryptCipher := v_EncryptCipher +
            IntToHex(strtoint(v_EncryptCipherBy), 2);

        end;
        s_EncryptText := v_EncryptCipher;
      end;

    end
    else
    begin
      for i_EncryptCountF := 0 to i_EncryptLevel do
      begin
        i_EncryptCountB := 0;
        i_EncryptCountC := 0;
        i_EncryptCountD := 0;
        i_EncryptCountE := 0;
        v_EncryptCipherBy := '';
        v_EncryptCipher := '';
        v_EncryptSwap := 0;
        for i_EncryptCountA := 0 to 255 do
        begin
          av_EncryptBox[i_EncryptCountA, 1] :=
            Ord(s_EncryptPassword[i_EncryptCountA mod Length(s_EncryptPassword) +
            1]);
          av_EncryptBox[i_EncryptCountA, 0] := i_EncryptCountA;
        end;
        for i_EncryptCountA := 0 to 255 do
        begin
          i_EncryptCountB := (i_EncryptCountB + av_EncryptBox[i_EncryptCountA, 0]
            + av_EncryptBox[i_EncryptCountA, 1]) mod 256;
          v_EncryptSwap := av_EncryptBox[i_EncryptCountA, 0];
          av_EncryptBox[i_EncryptCountA, 0] := av_EncryptBox[i_EncryptCountB,
            0];
          av_EncryptBox[i_EncryptCountB, 0] := v_EncryptSwap;
        end;
        for i_EncryptCountA := 1 to Length(s_EncryptText) do
        begin
          if (i_EncryptCountA mod 2) <> 0 then
          begin
            i_EncryptCountC := ((i_EncryptCountC + 1) mod 256);
            i_EncryptCountD := ((i_EncryptCountD +
              av_EncryptBox[i_EncryptCountC, 0]) mod 256);
            i_EncryptCountE := av_EncryptBox[((av_EncryptBox[i_EncryptCountC, 0]
              + av_EncryptBox[i_EncryptCountD, 0]) mod 256), 0];
            v_EncryptCipherBy := inttostr(StrToInt64('$' +
              s_EncryptText[i_EncryptCountA] + s_EncryptText[i_EncryptCountA + 1])
              xor i_EncryptCountE);
            v_EncryptCipher := v_EncryptCipher +
              Chr(strtoint(v_EncryptCipherBy));
          end;
        end;
        s_EncryptText := v_EncryptCipher;
        i_EncryptCountG := 0;
        i_EncryptCountH := 0;
        v_EncryptModified := '';
        for i_EncryptCountG := 1 to Length(s_EncryptText) do
        begin
          if i_EncryptCountH = Length(s_EncryptPassword) then
          begin
            i_EncryptCountH := 1;
          end
          else
          begin
            i_EncryptCountH := i_EncryptCountH + 1;
          end;
          v_EncryptModified := v_EncryptModified +
            Chr((Ord(s_EncryptText[i_EncryptCountG]) xor
            Ord(s_EncryptPassword[i_EncryptCountH]) xor 255));
        end;
        s_EncryptText := v_EncryptModified;
      end;
    end;
    result := s_EncryptText;
  end;
end;

end.

 

分享到:
评论

相关推荐

    Delphi 的rc4加密单元函数库

    标题 "Delphi 的rc4加密单元函数库" 涉及到的是在Delphi编程环境中使用RC4加密算法的一个自定义实现。RC4(Rivest Cipher 4)是一种流密码算法,由Ron Rivest在1987年设计,由于其简单性和效率,它在许多应用程序中...

    RC4加密算法演示程序

    RC4加密算法是一种广泛应用的流密码算法,由Ron Rivest在1987年设计,最初用于商业用途,因其高效性和简单性而受到欢迎。在这个“RC4加密算法演示程序”中,我们可以通过MFC(Microsoft Foundation Classes)框架来...

    Delphi 加密解密 AES DES RC Blowfish等算法控件源程序 Cipher_Component(1.0.0.0).rar

    3. **RC(Rivest Cipher)**:RC 系列是一组非标准的对称加密算法,如 RC2、RC4、RC5 和 RC6。它们的设计原理各异,但都具有一定的安全性。RC4 是一种流密码,广泛用于网络传输,而其他 RC 算法则适用于块加密。在 ...

    RC4加密技术

    对称加密(也叫私钥加密)指加密和解密使用相同密钥的加密算法。有时又叫传统密码算法,就是加密密钥能够从解密密钥中推算出来,同时解密密钥也可以从加密密钥中推算出来。而在大多数的对称算法中,加密密钥和解密密钥...

    delphi7系列优秀控件-RC4

    RC4控件可能包含了对RC4加密算法的高质量实现,便于Delphi 7用户在应用程序中实现数据的安全传输和存储。 **标签解读:** - **RC4**: 标签直接指出了关键的加密算法,用于数据加密。 - **delphi7**: 表明这些控件...

    CuteFTP 加密解密算法 Delphi版

    从文件名"CuteFTP 加密解密算法 Delphi版(图).exe"来看,这可能是包含源代码和示例程序的可执行文件,用于演示或测试这个算法。用户可以运行此程序来查看算法如何工作,或者研究其内部实现以学习和理解Delphi中的...

    经典delphi加密算法

    一个网上广为流传的Delphi加密算法, function EncryptString(Source, Key: string): string; var KeyLen: integer; KeyPos: integer; Offset: integer; Dest: string; SrcPos: integer; SrcAsc: integer; ...

    RC6.1.1.rar

    在Delphi的世界里,开发者可能使用各种加密库或自定义实现来集成加密算法,如RC6,以实现数据的安全传输和存储。RC6.1.1可能是RC6的一个特定版本或者是在Delphi环境中实现的一个增强版,这个版本可能修复了一些已知...

    delphi2007 des 3des mars Base64 Crc RC2 RC4 RC5 RC6加解密.rar

    这些组件涵盖了DES、3DES、MARS、Base64、CRC以及RC系列(RC2、RC4、RC5、RC6)等多种加密算法,可以用于实现数据的加密和解密功能。 1. DES(Data Encryption Standard):DES是一种古老的对称加密算法,由IBM开发...

    RC5.5.1_XE2.zip

    这个压缩包很可能是为开发者提供的一个更新或扩展,允许他们在Delphi XE2环境中使用RC5加密算法。 Delphi是一款由Embarcadero Technologies开发的集成开发环境(IDE),主要用于编写Windows应用程序,基于Object ...

    文本内容加密解密程序-Delphi源码..rar

    这个程序可能涵盖了基本的加密算法和解密算法,帮助开发者学习如何在Delphi环境下实现安全的数据保护。 首先,让我们来了解一下Delphi编程环境。Delphi由Embarcadero Technologies开发,提供了一个集成开发环境...

    DCrypt2010 for Delphi4 - Delphi XE7

    Delphi上的加密解密组件,支持Delphi4 至 Delphi XE7,包含以下对称加密算法: Blowfish、cast128、cast256、des、3des、ice、thinice、ice2、idea、mars、misty1、rc2、rc4、rc5、rc6、rijndael、serpent、tea、...

    加密算法 模块 加密算法 模块

    标准算法模块是集DES、3DES、AES、RSA、MD5、BlowFish、TEA、RC6等标准算法为一体的算法包,同时在模块中使用了Anti-Debug和程序自校验功能(涉及到软件的加壳和CRC32)、软件使用次数限制,更好的保护您的软件。...

    RC4

    RC4是一种广泛使用的流式加密算法,由Ron Rivest在1987年设计,其全称为Rivest Cipher 4。它最初是为商业用途而设计的,但后来由于其简单性和高效性,被广泛应用于各种场景,包括网络通信、软件保护等领域。在本文中...

    加密算法模块

    标准算法模块是集DES、3DES、AES、RSA、MD5、BlowFish、TEA、RC6等标准算法为一体的算法包,同时在模块中使用了Anti-Debug和程序自校验功能(涉及到软件的加壳和CRC32)、软件使用次数限制,更好的保护您的软件。...

    delphi异或加密解密实例

    同时,需要注意的是,尽管异或加密简单易用,但对于大规模数据或高安全性的需求,可能需要考虑使用更安全的加密算法,如AES(高级加密标准)。 这个压缩包文件"delphi异或加密解密实例"应该包含一个完整的Delphi...

    RC6.1.8 .7z

    3. **RC6.exe**: 这个文件极有可能是使用Delphi编译器编译生成的可执行程序,其名称暗示它可能与RC6加密算法有关。这个程序可能实现了RC6的加密和解密功能,用于数据保护或者安全通信。用户可以通过运行这个程序来...

    Delphi,C++ builder加密函数

    标准算法模块是集DES、3DES、AES、RSA、MD5、BlowFish、TEA、RC6等标准算法为一体的算法包,同时在模块中使用了Anti-Debug和程序自校验功能(涉及到软件的加壳和CRC32),增加了使用次数限制,更好的保护您的软件。...

    RC6

    RC6是一种对称密钥加密算法,由Rivest、Shamir和Adleman(RSA公司的创始人)在1997年设计,是DES(Data Encryption Standard)的潜在替代者之一,参与了AES(Advanced Encryption Standard)的竞赛,但最终未能入选...

    delphi 开发的加密解密控件演示程序(不包含控件) Cipher_Component_Demo(1.0.0.0).rar

    Delphi 加密解密 AES DES RC Blowfish等算法控件源程序。 包含:AES 加密解密,DES 加密解密,RC 加密解密 Blowfish加密解密等

Global site tag (gtag.js) - Google Analytics