最近有一个小项目中,有一些文本型的文件需要在不同用户间交换,为了防止用户恶意伪造数据,需要对数据做些简单加密。考虑了很多算法,非对称的,对称的都想过,但是要么是算法太复杂,在不同语言的系统间相互解密总是出些问题,又或者有性能问题不适合于加密较多的文本内容,考虑良久,决定还是化繁为简,用最简单的算法来实现自己的目标。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.
分享到:
- 2009-03-05 23:49
- 浏览 1550
- 评论(0)
- 论坛回复 / 浏览 (0 / 3735)
- 查看更多
相关推荐
BASE64是一个很通用的算法,一般的语言开发环境都有其标准的函数调用,但是其源代码是什么呢?此资源提供了源代码。里面有关于算法和内存操作的知识,看看源代码,自己改造一下,对自己也是一个挑战。多练手,提升...
根据提供的文件信息,我们可以深入探讨Base64加密算法在Java中的实现原理以及具体的代码细节。 ### Base64加密算法概述 Base64是一种基于64个可打印字符来表示二进制数据的方法。它通常用于将二进制数据转换为文本...
c++实现base64算法加密解密,不需要修改,直接运行即可
在实际项目中,Base64常用于加密敏感信息,如密码、API密钥等,尽管它的安全性并不高,但它简单易用,且在大多数环境中都能很好地工作。此外,现代编程语言库通常内置了Base64的加解密函数,但在某些特定场景下,如...
这个案例可能提供了一个简单的使用示例,如何在C#中通过GUI实现BASE64的加密和解密操作。用户可以通过`FrmMain`窗体选择文件,然后点击按钮执行加密或解密操作。程序会处理文件的读取、编码/解码和保存过程,使得C#...
3. **BASE64编码算法**:BASE64算法是将每3个8位字节的数据转换为4个6位的字符,最后通过一个查找表将6位二进制转换为可打印的ASCII字符。编码过程包括字节分组、添加填充位、计算余数以及查表转换。解码则是逆向...
在这个"Base64批量加密工具"中,我们看到作者使用Java语言编写了一个程序,用于自动化处理一批文件或数据的Base64编码过程,避免了手动逐条加密的繁琐。 在Java中,实现Base64编码主要依赖于`java.util.Base64`这个...
Delphi源码,算法相关,base64,加密,解密 Delphi base64 加密,解密示例源代码,这是个很常用但很流行的一种加密、解密算法,做过快车下载的朋友就知道,快车的下载链就是基于此种加密方法,除了加密网址外,它还可...
Base64字符集由大小写字母、数字以及"+"和"/"组成,末尾可能还需要添加一个等于号("=")进行填充。 在易语言中实现Base64编码,通常会使用到内置的字符串处理函数或第三方库。这些函数或库可以将任意字符串转换成...
压缩包内的源代码文件如aes.c、AES128Base64.c、base64.c和test.c分别代表了AES核心算法、AES128与Base64结合的实现、Base64编码和解码的实现以及测试代码。头文件aes.h、AES128Base64.h、base64.h则包含这些功能的...
它通过特定的算法,将每3个字节(24位)的数据转换为4个6位的十六进制数,每个十六进制数对应Base64字符集中的一个字符。Base64字符集由64个字符组成,包括大小写字母、数字以及"+"和"/",最后还有一个等于号("=")...
Base64是一种简单的编码方式,常用于将二进制数据转换为ASCII字符串,以便在网络传输或者存储时不会因为特殊字符引起问题。在C#中,可以使用`System.Convert`类的`ToBase64String`和`FromBase64String`方法进行Base...
本文将深入探讨三种常见的加密算法:AES、DES和Base64,并结合Delphi编程语言的源代码进行解析。 首先,让我们了解Base64。Base64是一种编码方法,而非严格的加密算法。它主要用于将二进制数据转化为可打印的ASCII...
在这个名为"Base64.rar"的压缩包中,包含了一个名为"Base64.bas"的文件,这很可能是一个Basic编程语言的源代码文件,实现了Base64的编码和解码功能。 Base64编码的基本原理是将每3个字节(24位)的数据转换为4个...
下面是一个简单的Base64编码示例: ```vb Dim plainText As String = "这是待加密的文本" Dim plainBytes As Byte() = System.Text.Encoding.UTF8.GetBytes(plainText) Dim base64Text As String = Convert.ToBase...
Base64编码基于64个可打印字符,包括大小写字母、数字以及"+"和"/",还有一个特殊字符"="用于填充。它将每3个字节的二进制数据拆分成4个6位的二进制数,然后将每个6位二进制数转换为对应的Base64字符。 二、SQL ...
在压缩包中的"Base64加密算法演示"文件中,很可能包含了一个完整的Delphi程序,演示了如何使用Base64对数据进行加密和解密。这个程序可能会包括用户输入数据、编码和解码的函数,以及结果的显示。通过分析和学习这个...
Base64算法基于64个可打印的ASCII字符,这些字符包括大小写字母、数字以及"+"和"/",还有一个特殊字符"="用于填充。其基本原理是将每3个字节的数据(24位)分为4组,每组6位,然后将这6位转换成对应的Base64字符,...
Base64算法基于一个64字符的字母表,包括大小写字母、数字、加号(+)和斜线(/)。这64个字符分别代表0到63的数值。当二进制数据需要编码时,每3个字节(24位)被分成4组,每组6位。如果原始数据不是3的倍数,会在...
在VS2010中实现RC4和Base64,你需要创建一个新的C++项目,并添加对应的源代码文件。通常,RC4的实现会包括一个初始化函数(用密钥设置状态),以及一个生成密钥流和加密/解密的函数。Base64的实现则通常包含编码和...