delphi版本的Base64解码编码源代码

合集下载
相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

delphi版本的Base64解码编码源代码

Unit CnBase64;

Interface

Uses

SysUtils, Windows;

Function Base64Encode(InputData: String; Var OutputData: String): byte;

{* 对数据进行BASE64编码,如编码成功返回Base64_OK

|InputData:string - 要编码的数据

var OutputData: string - 编码后的数据

|

}

Function Base64Decode(InputData: String; Var OutputData: String): byte;

{* 对数据进行BASE64解码,如解码成功返回Base64_OK

|

InputData:string - 要解码的数据

var OutputData: string - 解码后的数据

|

}

Const

BASE64_OK = 0; // 转换成功

BASE64_ERROR = 1;

// 转换错误(未知错误)(e.g. can't encode octet in input stream) -> error in implementation BASE64_INV ALID = 2;

// 输入的字符串中有非法字符(在FilterDecodeInput=False 时可能出现)

BASE64_LENGTH = 3; // 数据长度非法

BASE64_DATALEFT = 4;

// too much input data left (receveived 'end of encoded data' but not end of input string) BASE64_PADDING = 5; // 输入的数据未能以正确的填充字符结束Implementation

Var

FilterDecodeInput: Boolean = true;

Const

Base64TableLength = 64;

Base64Table : String[Base64TableLength] =

'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+*'; Pad = '=';

Function Base64Encode(InputData: String; Var OutputData: String): byte;

Var

i : integer;

CurrentB, PrevB : byte;

c : byte;

s : char;

InputLength : integer;

Function ValueToCharacter(value: byte; Var character: char): Boolean;

//****************************************************************** // 将一个在0..Base64TableLength-1区间内的值,转换为与Base64编码相对应// 的字符来表示,如果转换成功则返回True

//****************************************************************** Begin

result := true;

If (value > Base64TableLength - 1) Then

result := false

Else

character := Base64Table[value + 1];

End;

Begin

OutputData := '';

InputLength := Length(InputData);

i := 1;

If (InputLength = 0) Then Begin

result := BASE64_OK;

Exit;

End;

Repeat

// 第一次转换

CurrentB := Ord(InputData[i]);

i := i + 1;

InputLength := InputLength - 1;

c := (CurrentB Shr 2);

If Not ValueToCharacter(c, s) Then Begin

result := BASE64_ERROR;

Exit;

End;

OutputData := OutputData + s;

PrevB := CurrentB;

// 第二次转换

If InputLength = 0 Then

CurrentB := 0

Else Begin

CurrentB := Ord(InputData[i]);

i := i + 1;

End;

InputLength := InputLength - 1;

c := (PrevB An

d $03) Shl 4 + (CurrentB Shr 4);

//取出XX后4位并将其左移4位与XX右移4位合并成六位If Not ValueToCharacter(c, s) Then

{//检测取得的字符是否在Base64Table内} Begin

result := BASE64_ERROR;

Exit;

End;

OutputData := OutputData + s;

PrevB := CurrentB;

// 第三次转换

If InputLength < 0 Then

s := Pad

Else Begin

If InputLength = 0 Then

CurrentB := 0

Else Begin

CurrentB := Ord(InputData[i]);

i := i + 1;

End;

InputLength := InputLength - 1;

c := (PrevB An

d $0F) Shl 2 + (CurrentB Shr 6);

//取出XX后4位并将其左移2位与XX右移6位合并成六位If Not ValueToCharacter(c, s) Then

{//检测取得的字符是否在Base64Table内} Begin

result := BASE64_ERROR;

Exit;

End;

End;

OutputData := OutputData + s;

// 第四次转换

If InputLength < 0 Then

s := Pad

Else Begin

c := (CurrentB An

d $3F); //取出XX后6位

If Not ValueToCharacter(c, s) Then

{//检测取得的字符是否在Base64Table内} Begin

result := BASE64_ERROR;

Exit;

End;

End;

OutputData := OutputData + s;

Until InputLength <= 0;

result := BASE64_OK;

相关文档
最新文档