delphi base64 java_Base64以及delphi、Java实现[转]
//Base64編碼
function?TfrmBase1.Encode_Base64(AValue:?string):?string;
var
I?????????:?Integer;
TmpChar,
CurrentChar,????????//當前要加密的字符
NextChar,
ThirdChar?:?Byte;???//下一個要加密的字符
ResString?:?string;?//存放Base64以后的臨時結果
Count?????:?Integer;
begin
Result?:=?'';
ResString?:=?'';
Count?:=?Length(AValue);
I?:=?1;
if?AValue?<>?''?then
begin
repeat
//1、將第一個字符右移兩位并取得其對應Base64表中的目標字符
CurrentChar?:=?Ord(AValue[I]);?????????????//取得第一個字符在ASCII表中的序號
I?:=?I?+?1;
Dec(Count);????????????????????????????????//每進入一次循環計數器減1
TmpChar?:=?CurrentChar?shr?2;??????????????//右移兩位因為只取其前六位,數值上相當于除4
ResString?:=?ResString?+?Base64Table[TmpChar?+?1];?????//加1是因為Base64表中是從0開始
//2、將當前字符左移四位加上下一個字符右移四位?獲得下一個要的字符
//如果此時已超過字符串長度則賦0
if?Count?=?0?then
NextChar?:=?0
else
begin
NextChar?:=?Ord(AValue[I]);
I?:=?I?+?1;
end;
Dec(Count);????????????????????????????????//每進入一次循環計數器減1
TmpChar?:=?((CurrentChar?and?$03)?shl?4)?+?(NextChar?shr?4);
ResString?:=?ResString?+?Base64Table[TmpChar?+?1];
//3、第二個字符左移2位加上第三個字符右移6位,獲得第三個目標字符
if?Count?
ResString?:=?ResString?+?'='
else
begin
begin
if?Count?=?0?then
ThirdChar?:=?0
else
begin
ThirdChar?:=?Ord(AValue[I]);
I?:=?I?+?1;
end;
end;
Dec(Count);????????????????????????????????//每進入一次循環計數器減1
TmpChar?:=?((NextChar?and?$0F)?shl?2)?+?(ThirdChar?shr?6);
ResString?:=?ResString?+?Base64Table[TmpChar?+?1];
end;
//4、取第三個字符的后六位
if?Count?
ResString?:=?ResString?+?'='
else
begin
TmpChar?:=?ThirdChar?and?$3F;
ResString?:=?ResString?+?Base64Table[TmpChar?+?1];
end;
Result?:=?ResString;
until?Count?<=?0;
end;
end;
//Base64解碼
function?TfrmBase1.DeEncode_Base64(AValue:?string):?string;
var
I?????????:?Integer;
TmpChar???:?Char;
CurrentChar,????????//當前要加密的字符
NextChar,
ThirdChar?:?Byte;???//下一個要加密的字符
ResString?:?string;?//存放Base64以后的臨時結果
Count?????:?Integer;//作為計數器使用
begin
Result?:=?'';
ResString?:=?'';
Count?:=?0;
//提前判斷要解碼的字符串是否正常
for?I?:=?0?to?Length(AValue)?-?1?do
begin
if?Pos(AValue[I?+?1],?Base64TableCheck)?=?0?then
begin
Application.MessageBox('Base64解碼錯誤,原因:有字符越界!',?'解碼出錯',
MB_OK?+?MB_ICONSTOP);
Exit;
end;
end;
I?:=?1;?????????????????//放在循環之后
if?AValue?<>?''?then
begin
repeat
//第一次轉換
if?Count?<=?Length(AValue)?then
begin
TmpChar?:=?AValue[I];
I?:=?I?+?1;
inc(Count);
CurrentChar?:=?Pos(TmpChar,?Base64Table)?-?1;?//此處因Base64表從0開始
TmpChar?:=?AValue[I];
NextChar?:=?Pos(TmpChar,?Base64Table)?-?1;
ResString?:=?ResString?+?chr((CurrentChar?shl?2)?+?(NextChar?shr?4));
end;
//2
I?:=?I?+?1;
inc(Count);
if?Count?<=?Length(AValue)?then
begin
TmpChar?:=?AValue[I];
if?TmpChar?<>?'='?then
begin
ThirdChar?:=?Pos(TmpChar,?Base64Table)?-?1;
ResString?:=?ResString?+?chr((NextChar?shl?4)?+?(ThirdChar?shr?2));
end;
end;
//3
I?:=?I?+?1;
inc(Count);
if?Count?<=?Length(AValue)?then
begin
TmpChar?:=?AValue[I];
if?TmpChar?<>?'='?then
begin
CurrentChar?:=?Pos(TmpChar,?Base64Table)?-?1;
ResString?:=?ResString?+?chr((ThirdChar?shl?6)?+?(CurrentChar));
end;
end;
I?:=?I?+?1;????//此處一定要注意增加變量
inc(Count);
until?Count?>=?Length(AValue);
Result?:=?ResString;
end;
end;
與50位技術專家面對面20年技術見證,附贈技術全景圖總結
以上是生活随笔為你收集整理的delphi base64 java_Base64以及delphi、Java实现[转]的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mysql教程or怎么用_MySQL中o
- 下一篇: java8 内存模型_java8内存模型