//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实现[转]相关推荐

  1. delphi android闪退,delphi 运行后闪退

    我的delphi编完一段程序之后按F9可以运行,但是关掉并保存Delphi之后再打开Delphi然后打开之前那个编辑的程序按F9就直接闪退了. 程序如下: unit Unit1; interface ...

  2. 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 ...

  3. delphi Base64 编解码

    Delphi 自带了 Base64 编解码的单元,叫 EncdDecd,这名字很拗口而且不直观,估计这是一直很少人关注和知道的原因. 这个单元提供两套四个公开函数: 对流的编解码: procedure ...

  4. Delphi Base64编码/解码及ZLib压缩/解压

    最近在写的程序与SOAP相关,所以用到了一些Base64编码/解码及数据压缩/解压方面的知识. 在这里来作一些总结: 一.Base64编码/解码 一般用到的是Delphi自带的单元EncdDecd,当 ...

  5. delphi Base64编码/解码及数据压缩/解压知识

    一.Base64编码/解码 一般用到的是Delphi自带的单元EncdDecd,当然还有第三方提供的单元或控件,其中我所接触到的认为比较好的有Indy的TIdMimeEncode / TIdMimeD ...

  6. delphi android 短信,delphi xe5 android 开发实现手机打电话和发短信

    其实都可以通过intent和URI调用系统功能.Windows程序员可以理解成是ShellExecute.这个是万金油.可以有调用各种功能.后面会介绍. 1.短信息.很简单 方法a.不使用Intent ...

  7. delphi怎么获得文件服务器,delphi做web服务器

    delphi做web服务器 内容精选 换一换 公网域名解析是基于Internet网络的域名解析过程,可以把人们常用的域名(如www.example.com)转换成用于计算机连接的IP地址(如1.2.3 ...

  8. delphi oracle新建用户,Delphi 中如何用另外一个用户的身份来运行一人程序

    如一个程序要有以下的命令来运行 runas /env /savecred /user:hhql "c:\qlnetbar\bc2\bc2" 我现在的问题是如何在Delphi中用代码 ...

  9. delphi pdf 转换 html5,Delphi使用Word ActiveX将doc转换为pdf

    我使用以下.vbs脚本执行此操作.如果你需要Delphi代码,那么转换就很容易了: Const wdDoNotSaveChanges = 0 Const wdRevisionsViewFinal = ...

最新文章

  1. codevs——1958 刺激
  2. JS一起学02:函数传参、操作属性第二种方式、提取行间事件、循环、this、焦点问题、联动选择、选项卡焦点图
  3. ssm多数据源的操作
  4. 用.XML填充TreeView
  5. css 设置其它标签,有没有办法将CSS样式设置为特定输入类型的标签?
  6. WCDMA,CDMA2000,TD_SCDMA
  7. mock.js 在html中使用demo示例代码
  8. 竹间智能B轮3000万美元融资,打造业内领先的对话机器人及多模态情感计算平台...
  9. 时域,空域,频域的基本概念
  10. 《东周列国志》第七十八回 会夹谷孔子却齐 堕三都闻人伏法
  11. 2016年终总结与来年计划
  12. windows server 2003的一些设置
  13. STM32串口DMA方式接收数据。类似环形FIFO。超省CPU资源!
  14. XUPT 新生赛题目总结
  15. Objective-C面向对象
  16. OCR识别技术 文档识别的三种形式
  17. list redis 怎样做排行_Redis中5种数据结构的使用场景介绍
  18. 百度2015校园招聘面试题(成功拿到offer)
  19. 软件测试之测试用例评审
  20. Cadence每日一学_08 | OrCAD绘制原理图 - 元器件封装FootPrint信息处理及显示

热门文章

  1. ubuntu创建文件夹快捷方式命令
  2. ubuntu共享无线链接
  3. 机房收费系统----可行性分析报告
  4. 能简单才不简单,仿Flickr.com:基于Flash+jQuery的一次性划选多文件并上传
  5. 一步一步学Linq to sql(七):并发与事务
  6. linux查看终端进程,Linux查看进程
  7. 【PP生产订单】入门介绍(十三)
  8. 对不起,亲爱的,我将离开你
  9. FI 与MM SD的接口配置基本方法
  10. SAP 动态设置 GUI STATUS 灰色不可用 或者隐藏