not recommend ,only for study

  1. procedure TForm1.Button3Click(Sender: TObject);
  2. var
  3. ssi, sso: TStringStream;
  4. abt: TBytes;
  5. s1: string;
  6. begin
  7. ssi := TStringStream.Create(Edit1.Text);
  8. sso := TStringStream.Create((''));
  9. Base64Unit.EncodeStream(ssi, sso);
  10.  
  11. sso.Seek(, soFromBeginning);
  12. SetLength(abt, sso.Size * );
  13. sso.ReadData(abt, sso.Size * );
  14.  
  15. s1 := TEncoding.Unicode.GetString(abt);
  16. Edit2.Text := s1;
  17. ssi.Free;
  18. sso.Free;
  19. end;
  20.  
  21. procedure TForm1.Button5Click(Sender: TObject);
  22. var
  23. ssi, sso: TStringStream;
  24. abt: TBytes;
  25. s1: string;
  26. begin
  27. ssi := TStringStream.Create(Edit2.Text);
  28. sso := TStringStream.Create((''));
  29. Base64Unit.DecodeStream(ssi, sso);
  30.  
  31. sso.Seek(, soFromBeginning);
  32. SetLength(abt, sso.Size * );
  33. sso.ReadData(abt, sso.Size * );
  34.  
  35. Edit4.Text := sso.DataString;
  36. ssi.Free;
  37. sso.Free;
  38.  
  39. end;
  1. unit Base64Unit;
  2.  
  3. interface
  4.  
  5. uses
  6. Classes, SysUtils;
  7.  
  8. function Base64Encryption(const Input:String):String;
  9. function Base64Decryption(const Input:String):String;
  10.  
  11. procedure EncodeStream(InStream, OutStream : TStream);
  12. procedure DecodeStream(InStream, OutStream : TStream);
  13.  
  14. implementation
  15.  
  16. const
  17. BASE64Table : array[..] of Char = ( #, #, #, #, #,
  18. #, #, #, #, #, #, #, #, #, #,
  19. #, #, #, #, #, #, #, #, #, #,
  20. #, #, #, #, #, #, #, #, #, #,
  21. #, #, #, #, #, #, #, #, #, #,
  22. #, #, #, #, #, #, #, #, #, #,
  23. #, #, #, #, #, #, #, #, #);
  24.  
  25. const
  26. BASE64DeTable : array[..] of Byte = ($3E, $7F, $7F, $7F, $3F, $,
  27. $, $, $, $, $, $3A, $3B, $3C, $3D, $7F, $7F, $7F, $7F,
  28. $7F, $7F, $7F, $, $, $, $, $, $, $, $, $, $,
  29. $0A, $0B, $0C, $0D, $0E, $0F, $, $, $, $, $, $, $,
  30. $, $, $, $7F, $7F, $7F, $7F, $7F, $7F, $1A, $1B, $1C, $1D,
  31. $1E, $1F, $, $, $, $, $, $, $, $, $, $, $2A,
  32. $2B, $2C, $2D, $2E, $2F, $, $, $, $);
  33.  
  34. //BASE64算法流加密
  35. procedure EncodeStream(InStream, OutStream : TStream);
  36. var
  37. I, O, Count : Integer;
  38. InBuf : array[..] of Byte;
  39. OutBuf : array[..] of Char; //Char
  40. Temp : Byte;
  41. abt:TBytes;
  42. begin
  43. FillChar(OutBuf, Sizeof(OutBuf), #);
  44.  
  45. repeat
  46. Count := InStream.Read(InBuf, SizeOf(InBuf));
  47. if Count = then Break;
  48. I := ;
  49. O := ;
  50. while I <= (Count-) do begin
  51. { 编码第一个字节 }
  52. Temp := (InBuf[I] shr );
  53. OutBuf[O] := Char(BASE64Table[Temp and $3F]);
  54.  
  55. { 编码第二个字节 }
  56. Temp := (InBuf[I] shl ) or (InBuf[I+] shr );
  57. OutBuf[O+] := Char(BASE64Table[Temp and $3F]);
  58.  
  59. { 编码第三个字节 }
  60. Temp := (InBuf[I+] shl ) or (InBuf[I+] shr );
  61. OutBuf[O+] := Char(BASE64Table[Temp and $3F]);
  62.  
  63. { 编码第四个字节 }
  64. Temp := (InBuf[I+] and $3F);
  65. OutBuf[O+] := Char(BASE64Table[Temp]);
  66.  
  67. Inc(I, );
  68. Inc(O, );
  69. end;
  70.  
  71. if (I <= Count) then begin
  72. Temp := (InBuf[I] shr );
  73. OutBuf[O] := Char(BASE64Table[Temp and $3F]);
  74.  
  75. { 一个奇数字节 }
  76. if I = Count then begin
  77. Temp := (InBuf[I] shl ) and $;
  78. OutBuf[O+] := Char(BASE64Table[Temp and $3F]);
  79. OutBuf[O+] := '=';
  80. { 两个基数字节 }
  81. end else begin
  82. Temp := ((InBuf[I] shl ) and $) or ((InBuf[I+] shr ) and $0F);
  83. OutBuf[O+] := Char(BASE64Table[Temp and $3F]);
  84. Temp := (InBuf[I+] shl ) and $3C;
  85. OutBuf[O+] := Char(BASE64Table[Temp and $3F]);
  86. end;
  87. { 增加= }
  88. OutBuf[O+] := '=';
  89. Inc(O, );
  90. end;
  91.  
  92. { 把编码好的块写到流中 }
  93. OutStream.Write(OutBuf, O*); // Modified by for xe8 2015-07-30 15:36:51 o > o*2
  94. until Count < SizeOf(InBuf);
  95. end;
  96.  
  97. //BASE64算法流解密
  98. procedure DecodeStream(InStream, OutStream : TStream);
  99. var
  100. I, O, Count, c1, c2, c3 : Byte;
  101. InBuf : array[..] of Byte;
  102. OutBuf : array[..] of Byte;
  103. begin
  104. repeat
  105. O := ;
  106. I := ;
  107.  
  108. Count := InStream.Read(InBuf, SizeOf(InBuf));
  109. if (Count = ) then
  110. Break;
  111.  
  112. { 解密的数据输入到流中 }
  113. while I < Count do begin
  114. if (InBuf[I] < ) or (InBuf[I] > ) or
  115. (InBuf[I+] < ) or (InBuf[I+] > ) or
  116. (InBuf[I+] < ) or (InBuf[I+] > ) or
  117. (InBuf[I+] < ) or (InBuf[I+] > ) then
  118. raise Exception.Create('Invalid Base64 Character');
  119.  
  120. c1 := BASE64DeTable[InBuf[I]];
  121. c2 := BASE64DeTable[InBuf[I+]];
  122. c3 := BASE64DeTable[InBuf[I+]];
  123. OutBuf[O] := ((c1 shl ) or (c2 shr ));
  124. Inc(O);
  125. if Char(InBuf[I+]) <> '=' then begin
  126. OutBuf[O] := ((c2 shl ) or (c3 shr ));
  127. Inc(O);
  128. if Char(InBuf[I+]) <> '=' then begin
  129. OutBuf[O] := ((c3 shl ) or BASE64DeTable[InBuf[I+]]);
  130. Inc(O);
  131. end;
  132. end;
  133. Inc(I, );
  134. end;
  135. OutStream.Write(OutBuf, O);
  136. until Count < SizeOf(InBuf);
  137. end;
  138.  
  139. //BASE64算法字符串加密
  140. function Base64Encryption(const Input:String):String;
  141. var
  142. InStream : TMemoryStream;
  143. OutStream : TMemoryStream;
  144. begin
  145. InStream := TMemoryStream.Create;
  146. OutStream := TMemoryStream.Create;
  147.  
  148. InStream.Write(Input[], Length(Input));
  149. InStream.Position := ;
  150. EncodeStream(InStream, OutStream);
  151. OutStream.Position := ;
  152. SetLength(Result, OutStream.Size);
  153. OutStream.Read(Result[], OutStream.Size);
  154.  
  155. InStream.Free;
  156. OutStream.Free;
  157. end;
  158.  
  159. //BASE64算法字符串解密
  160. function Base64Decryption(const Input:String):String;
  161. var
  162. InStream : TMemoryStream;
  163. OutStream : TMemoryStream;
  164. begin
  165. InStream := TMemoryStream.Create;
  166. OutStream := TMemoryStream.Create;
  167.  
  168. InStream.Write(Input[], Length(Input));
  169. InStream.Position := ;
  170. DecodeStream(InStream, OutStream);
  171. OutStream.Position := ;
  172. SetLength(Result, OutStream.Size);
  173. OutStream.Read(Result[], OutStream.Size);
  174.  
  175. InStream.Free;
  176. OutStream.Free;
  177. end;
  178.  
  179. end.

老 base64 for xe8的更多相关文章

  1. [分享黑科技]纯js突破localstorage存储上线,远程抓取图片,并转码base64保存本地,最终实现整个网站所有静态资源离线到用户手机效果却不依赖浏览器的缓存机制,单页应用最新黑科技

    好久没有写博客了,想到2年前答应要放出源代码的也没放出来,最近终于有空先把纯js实现无限空间大小的本地存储的功能开源了,项目地址https://github.com/xueduany/localsto ...

  2. 使用Qpython3制作老版天翼飞TP路由器拨号脚本

    #幻境拨号python版 #by 1414641776 account='xxxxxx@96301' password='xxxxx' # 路由器脚本 def sendToRoute(account, ...

  3. Python之数据加密与解密及相关操作(hashlib模块、hmac模块、random模块、base64模块、pycrypto模块)

    本文内容 数据加密概述 Python中实现数据加密的模块简介 hashlib与hmac模块介绍 random与secrets模块介绍 base64模块介绍 pycrypto模块介绍 总结 参考文档 提 ...

  4. 前端性能优化--图片处理(Css Sprites 与 base64)

    前言: 近期研究着前端性能的优化方面的知识,并以博客记之.之前有相同系列的文章(前端性能优化--图片懒加载(lazyload image)),这次继续是关于图片的处理,css sprites 和 ba ...

  5. 微信小程序语音识别服务搭建全过程解析(https api开放,支持新接口mp3录音、老接口silk录音)

    silk v3(或新录音接口mp3)录音转olami语音识别和语义处理的api服务(ubuntu16.04服务器上实现) 重要的写在前面 重要事项一: 所有相关更新,我优先更新到我个人博客中,其它地方 ...

  6. 将不确定变为确定~老赵写的CodeTimer是代码性能测试的利器

    首先,非常感谢赵老大的CodeTimer,它让我们更好的了解到代码执行的性能,从而可以让我们从性能的角度来考虑问题,有些东西可能我们认为是这样的,但经理测试并非如何,这正应了我之前的那名话:“机器最能 ...

  7. Python之数据加密与解密及相关操作(hashlib、hmac、random、base64、pycrypto)

    本文内容 数据加密概述 Python中实现数据加密的模块简介 hashlib与hmac模块介绍 random与secrets模块介绍 base64模块介绍 pycrypto模块介绍 总结 参考文档 提 ...

  8. Python常用模块--base64

    作用:对一些保密性不强的信息进行加密,变为人类不能直接理解的字符串,但是可以反向解密,是一种‘防君子,不防小人’的措施. 例如:在一些项目中,接口的报文是通过base64加密传输的,所以在进行接口自动 ...

  9. 使用base64转码的方式上传图片

    1.前端html代码 <input style="width:100%" onchange="loadpicture(1)" type="fil ...

随机推荐

  1. Data.gov.uk电子政务云,牛津大学NIE金融大数据实验室王宁:数据治理的现状和实践

    牛津大学NIE金融大数据实验室王宁:数据治理的现状和实践 我是牛津互联网研究院的研究员,是英国开放互联网的一个主要的研究机构和相关政策制订的一个机构.今天主要给大家介绍一下英国数据治理的一些现状和实践 ...

  2. hibernate.cfg.xml文件的说明

    <?xml version='1.0' encoding='UTF-8'?> <!DOCTYPE hibernate-configuration PUBLIC "-//Hi ...

  3. HTML+CSS+JAVASCRIPT 总结

    1. HTML 1: <!doctype html> 2: <!-- This is a test html for html, css, javascript --> 3: ...

  4. Android EditText截获与监听输入事件

      Android EditText截获与监听输入事件共有2种方法: 1.第一种方法:使用setOnKeyListener(),不过这种方式只能监听硬键盘事件. edittext.setOnKeyLi ...

  5. iOS富文本(二)初识Text Kit

    概述 Text Kit 是建立在Core Text上的文本布局系统,虽然没有Core Text那么强大的文本处理功能,但是对于大多数常见的文本布局用Text Kit能够很简单的实现,而不是用Core ...

  6. iso中AutoLayout和Autoresizing Mask的区别

    •在iOS6之前,关于屏幕旋转的适配和iPhone,iPad屏幕的自动适配,基本都是由Autoresizing Mask来完成的.但是随着大家对iOS App的要求越来越高,以及今后可能出现的多种屏幕 ...

  7. [转载] ubuntu下定制Vim/Gvim及使用技巧

    vim是linux下的编辑器之神,是玩linux的必备工具,同样emacs是神的编辑器,两个编辑器是各有千秋,看个人的喜好,青菜萝卜各有所爱.我是比较喜欢vim,用vim编写bash,perl,pyt ...

  8. impdp之remap_schema参数

    众所周知,IMP工具的FROMUSER和TOUSER参数可以实现将一个用户的的数据迁移到另外一个用户.同样的功能在IMPPDP工具中如何得以体现呢?答案就是:使用IMPPDP的REMAP_SCHEMA ...

  9. Java中Volatile关键字详解

    一.基本概念 先补充一下概念:Java并发中的可见性与原子性 可见性: 可见性是一种复杂的属性,因为可见性中的错误总是会违背我们的直觉.通常,我们无法确保执行读操作的线程能适时地看到其他线程写入的值, ...

  10. Javascript模块化编程(三):require.js的用法 (转)

    转自:http://my.oschina.net/u/1390066/blog/213769 一.为什么要用require.js? 最早的时候,所有Javascript代码都写在一个文件里面,只要加载 ...