`

一个用于简单加密的Base64变形算法源码

阅读更多

      最近有一个小项目中,有一些文本型的文件需要在不同用户间交换,为了防止用户恶意伪造数据,需要对数据做些简单加密。考虑了很多算法,非对称的,对称的都想过,但是要么是算法太复杂,在不同语言的系统间相互解密总是出些问题,又或者有性能问题不适合于加密较多的文本内容,考虑良久,决定还是化繁为简,用最简单的算法来实现自己的目标。Base64不能算是一种加密算法,对于标准的Base64编码字串,连三岁小孩都可以找个工具来解着玩,但如果把Base64的码表打乱,再进行编码,解密也就不是唾手可得的事了,对于加密这种要求不是很高的交换文件,应该还是可以的。

      于是,动手用Delphi写了下面这段代码。我不是Delphi高手,只是现学现卖,达到目的就成,代码写得好不好看也就不管了。

unit Base64;

interface
uses
  Sysutils;

function Base64Len(const srcLen : Integer):Integer; stdcall;
function Base64LenStr(const src : PChar):Integer; stdcall;
function Base64Encode(const Src :PChar; Dest: PChar; destLen : Integer ): Integer; stdcall;
function Base64Decode(const Src :PChar; Dest: PChar; destLen : Integer ): Integer; stdcall;

implementation
const B64Table = 'CDAENOPUIVWYZabTcdefghijklXmnFGKLMopqrstuJvQBRSwxyz0H123456789+/';
const B64Pad = '&';

function Base64Len;
begin
  Result := (4 * (srcLen + 3) div 3) + 1;
end;

function Base64LenStr;
var
  srcLen : Integer;
begin
  srcLen := StrLen(src);
  Result := Base64Len(srcLen);
end;

function Base64Encode(const Src: PChar; Dest : PChar; destLen : Integer ): Integer; stdcall;
var
  i: Integer;
  a: Integer;
  x: Integer;
  b: Integer;
  S: String;
  Ret: String;
begin
  S := StrPas( Src );
  a := 0;
  b := 0;
  for i := 1 to Length(s) do
  begin
    x := Ord(s[i]);
    b := b * 256 + x;
    a := a + 8;
    while a >= 6 do
    begin
      a := a - 6;
      x := b div (1 shl a);
      b := b mod (1 shl a);
      Ret := Ret + B64Table[x + 1];
    end;
  end;
  if a > 0 then
  begin
    x := b shl (6 - a);
    Ret := Ret + B64Table[x + 1];
  end;
  Result := length(Ret);
  StrCopy( Dest, PChar(Ret));
end;

function Base64Decode(const Src: PChar; Dest : PChar; destLen : Integer ): Integer; stdcall;
var
  i: Integer;
  a: Integer;
  x: Integer;
  b: Integer;
  S : String;
  Ret : String;
begin
  Result := -1;
  S := StrPas(Src);
  a := 0;
  b := 0;
  for i := 1 to Length(s) do
  begin
    x := Pos(s[i], B64Table) - 1;
    if x >= 0 then
    begin
      b := b * 64 + x;
      a := a + 6;
      if a >= 8 then
      begin
        a := a - 8;
        x := b shr a;
        b := b mod (1 shl a);
        x := x mod 256;
        Ret := Ret + chr(x);
      end;
    end
    else
      Exit;
  end;
  Result := length(Ret);
  StrCopy( Dest, PChar(Ret));
end;


end.

 

分享到:
评论

相关推荐

    BASE64 加密算法 源代码

    BASE64是一个很通用的算法,一般的语言开发环境都有其标准的函数调用,但是其源代码是什么呢?此资源提供了源代码。里面有关于算法和内存操作的知识,看看源代码,自己改造一下,对自己也是一个挑战。多练手,提升...

    Base64加密算法源码(java版).pdf

    根据提供的文件信息,我们可以深入探讨Base64加密算法在Java中的实现原理以及具体的代码细节。 ### Base64加密算法概述 Base64是一种基于64个可打印字符来表示二进制数据的方法。它通常用于将二进制数据转换为文本...

    c++实现base64算法加密解密

    c++实现base64算法加密解密,不需要修改,直接运行即可

    Base64 加密 解密 算法及源码

    在实际项目中,Base64常用于加密敏感信息,如密码、API密钥等,尽管它的安全性并不高,但它简单易用,且在大多数环境中都能很好地工作。此外,现代编程语言库通常内置了Base64的加解密函数,但在某些特定场景下,如...

    C# BASE64加密算法

    这个案例可能提供了一个简单的使用示例,如何在C#中通过GUI实现BASE64的加密和解密操作。用户可以通过`FrmMain`窗体选择文件,然后点击按钮执行加密或解密操作。程序会处理文件的读取、编码/解码和保存过程,使得C#...

    STM32-BASE64加密源代码.rar

    3. **BASE64编码算法**:BASE64算法是将每3个8位字节的数据转换为4个6位的字符,最后通过一个查找表将6位二进制转换为可打印的ASCII字符。编码过程包括字节分组、添加填充位、计算余数以及查表转换。解码则是逆向...

    Base64批量加密工具

    在这个"Base64批量加密工具"中,我们看到作者使用Java语言编写了一个程序,用于自动化处理一批文件或数据的Base64编码过程,避免了手动逐条加密的繁琐。 在Java中,实现Base64编码主要依赖于`java.util.Base64`这个...

    Delphi源码,算法相关,base64,加密,解密

    Delphi源码,算法相关,base64,加密,解密 Delphi base64 加密,解密示例源代码,这是个很常用但很流行的一种加密、解密算法,做过快车下载的朋友就知道,快车的下载链就是基于此种加密方法,除了加密网址外,它还可...

    易语言Base64支持密码加密

    Base64字符集由大小写字母、数字以及"+"和"/"组成,末尾可能还需要添加一个等于号("=")进行填充。 在易语言中实现Base64编码,通常会使用到内置的字符串处理函数或第三方库。这些函数或库可以将任意字符串转换成...

    AES加密 BASE64测试代码

    压缩包内的源代码文件如aes.c、AES128Base64.c、base64.c和test.c分别代表了AES核心算法、AES128与Base64结合的实现、Base64编码和解码的实现以及测试代码。头文件aes.h、AES128Base64.h、base64.h则包含这些功能的...

    基于Delphi的Base64加密算法演示代码..rar

    它通过特定的算法,将每3个字节(24位)的数据转换为4个6位的十六进制数,每个十六进制数对应Base64字符集中的一个字符。Base64字符集由64个字符组成,包括大小写字母、数字以及"+"和"/",最后还有一个等于号("=")...

    C# base64加密,秘钥加密

    Base64是一种简单的编码方式,常用于将二进制数据转换为ASCII字符串,以便在网络传输或者存储时不会因为特殊字符引起问题。在C#中,可以使用`System.Convert`类的`ToBase64String`和`FromBase64String`方法进行Base...

    aes,des,base64加密算法文档及源代码

    本文将深入探讨三种常见的加密算法:AES、DES和Base64,并结合Delphi编程语言的源代码进行解析。 首先,让我们了解Base64。Base64是一种编码方法,而非严格的加密算法。它主要用于将二进制数据转化为可打印的ASCII...

    Base64.rar 一个Base64加密功能块

    在这个名为"Base64.rar"的压缩包中,包含了一个名为"Base64.bas"的文件,这很可能是一个Basic编程语言的源代码文件,实现了Base64的编码和解码功能。 Base64编码的基本原理是将每3个字节(24位)的数据转换为4个...

    Base64 个性化加密解密功能VB源码

    下面是一个简单的Base64编码示例: ```vb Dim plainText As String = "这是待加密的文本" Dim plainBytes As Byte() = System.Text.Encoding.UTF8.GetBytes(plainText) Dim base64Text As String = Convert.ToBase...

    sqlserver2005的base64加密解密函数

    Base64编码基于64个可打印字符,包括大小写字母、数字以及"+"和"/",还有一个特殊字符"="用于填充。它将每3个字节的二进制数据拆分成4个6位的二进制数,然后将每个6位二进制数转换为对应的Base64字符。 二、SQL ...

    Delphi Base64 加密解密源码

    在压缩包中的"Base64加密算法演示"文件中,很可能包含了一个完整的Delphi程序,演示了如何使用Base64对数据进行加密和解密。这个程序可能会包括用户输入数据、编码和解码的函数,以及结果的显示。通过分析和学习这个...

    java实现base64加密

    Base64算法基于64个可打印的ASCII字符,这些字符包括大小写字母、数字以及"+"和"/",还有一个特殊字符"="用于填充。其基本原理是将每3个字节的数据(24位)分为4组,每组6位,然后将这6位转换成对应的Base64字符,...

    Base64算法完整源码与调用方法

    Base64算法基于一个64字符的字母表,包括大小写字母、数字、加号(+)和斜线(/)。这64个字符分别代表0到63的数值。当二进制数据需要编码时,每3个字节(24位)被分成4组,每组6位。如果原始数据不是3的倍数,会在...

    (VS2010 C++)基于RC4和Base64的加解密算法实现,可用于项目开发

    在VS2010中实现RC4和Base64,你需要创建一个新的C++项目,并添加对应的源代码文件。通常,RC4的实现会包括一个初始化函数(用密钥设置状态),以及一个生成密钥流和加密/解密的函数。Base64的实现则通常包含编码和...

Global site tag (gtag.js) - Google Analytics