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;
delphi base64 java_Base64以及delphi、Java实现[转]相关推荐
- delphi android闪退,delphi 运行后闪退
我的delphi编完一段程序之后按F9可以运行,但是关掉并保存Delphi之后再打开Delphi然后打开之前那个编辑的程序按F9就直接闪退了. 程序如下: unit Unit1; interface ...
- delphi XE应用Restful时Rest组件的delphi XE ContentType即delphi XE mime type怎样获取和表达
delphi XE应用Restful时Rest组件的delphi XE ContentType即delphi XE mime type怎样获取和表达 一.uses REST.Types; //var ...
- delphi Base64 编解码
Delphi 自带了 Base64 编解码的单元,叫 EncdDecd,这名字很拗口而且不直观,估计这是一直很少人关注和知道的原因. 这个单元提供两套四个公开函数: 对流的编解码: procedure ...
- Delphi Base64编码/解码及ZLib压缩/解压
最近在写的程序与SOAP相关,所以用到了一些Base64编码/解码及数据压缩/解压方面的知识. 在这里来作一些总结: 一.Base64编码/解码 一般用到的是Delphi自带的单元EncdDecd,当 ...
- delphi Base64编码/解码及数据压缩/解压知识
一.Base64编码/解码 一般用到的是Delphi自带的单元EncdDecd,当然还有第三方提供的单元或控件,其中我所接触到的认为比较好的有Indy的TIdMimeEncode / TIdMimeD ...
- delphi android 短信,delphi xe5 android 开发实现手机打电话和发短信
其实都可以通过intent和URI调用系统功能.Windows程序员可以理解成是ShellExecute.这个是万金油.可以有调用各种功能.后面会介绍. 1.短信息.很简单 方法a.不使用Intent ...
- delphi怎么获得文件服务器,delphi做web服务器
delphi做web服务器 内容精选 换一换 公网域名解析是基于Internet网络的域名解析过程,可以把人们常用的域名(如www.example.com)转换成用于计算机连接的IP地址(如1.2.3 ...
- delphi oracle新建用户,Delphi 中如何用另外一个用户的身份来运行一人程序
如一个程序要有以下的命令来运行 runas /env /savecred /user:hhql "c:\qlnetbar\bc2\bc2" 我现在的问题是如何在Delphi中用代码 ...
- delphi pdf 转换 html5,Delphi使用Word ActiveX将doc转换为pdf
我使用以下.vbs脚本执行此操作.如果你需要Delphi代码,那么转换就很容易了: Const wdDoNotSaveChanges = 0 Const wdRevisionsViewFinal = ...
最新文章
- codevs——1958 刺激
- JS一起学02:函数传参、操作属性第二种方式、提取行间事件、循环、this、焦点问题、联动选择、选项卡焦点图
- ssm多数据源的操作
- 用.XML填充TreeView
- css 设置其它标签,有没有办法将CSS样式设置为特定输入类型的标签?
- WCDMA,CDMA2000,TD_SCDMA
- mock.js 在html中使用demo示例代码
- 竹间智能B轮3000万美元融资,打造业内领先的对话机器人及多模态情感计算平台...
- 时域,空域,频域的基本概念
- 《东周列国志》第七十八回 会夹谷孔子却齐 堕三都闻人伏法
- 2016年终总结与来年计划
- windows server 2003的一些设置
- STM32串口DMA方式接收数据。类似环形FIFO。超省CPU资源!
- XUPT 新生赛题目总结
- Objective-C面向对象
- OCR识别技术 文档识别的三种形式
- list redis 怎样做排行_Redis中5种数据结构的使用场景介绍
- 百度2015校园招聘面试题(成功拿到offer)
- 软件测试之测试用例评审
- Cadence每日一学_08 | OrCAD绘制原理图 - 元器件封装FootPrint信息处理及显示