老 base64 for xe8
not recommend ,only for study
procedure TForm1.Button3Click(Sender: TObject);
var
ssi, sso: TStringStream;
abt: TBytes;
s1: string;
begin
ssi := TStringStream.Create(Edit1.Text);
sso := TStringStream.Create((''));
Base64Unit.EncodeStream(ssi, sso); sso.Seek(, soFromBeginning);
SetLength(abt, sso.Size * );
sso.ReadData(abt, sso.Size * ); s1 := TEncoding.Unicode.GetString(abt);
Edit2.Text := s1;
ssi.Free;
sso.Free;
end; procedure TForm1.Button5Click(Sender: TObject);
var
ssi, sso: TStringStream;
abt: TBytes;
s1: string;
begin
ssi := TStringStream.Create(Edit2.Text);
sso := TStringStream.Create((''));
Base64Unit.DecodeStream(ssi, sso); sso.Seek(, soFromBeginning);
SetLength(abt, sso.Size * );
sso.ReadData(abt, sso.Size * ); Edit4.Text := sso.DataString;
ssi.Free;
sso.Free; end;
unit Base64Unit; interface uses
Classes, SysUtils; function Base64Encryption(const Input:String):String;
function Base64Decryption(const Input:String):String; procedure EncodeStream(InStream, OutStream : TStream);
procedure DecodeStream(InStream, OutStream : TStream); implementation const
BASE64Table : array[..] of Char = ( #, #, #, #, #,
#, #, #, #, #, #, #, #, #, #,
#, #, #, #, #, #, #, #, #, #,
#, #, #, #, #, #, #, #, #, #,
#, #, #, #, #, #, #, #, #, #,
#, #, #, #, #, #, #, #, #, #,
#, #, #, #, #, #, #, #, #); const
BASE64DeTable : array[..] of Byte = ($3E, $7F, $7F, $7F, $3F, $,
$, $, $, $, $, $3A, $3B, $3C, $3D, $7F, $7F, $7F, $7F,
$7F, $7F, $7F, $, $, $, $, $, $, $, $, $, $,
$0A, $0B, $0C, $0D, $0E, $0F, $, $, $, $, $, $, $,
$, $, $, $7F, $7F, $7F, $7F, $7F, $7F, $1A, $1B, $1C, $1D,
$1E, $1F, $, $, $, $, $, $, $, $, $, $, $2A,
$2B, $2C, $2D, $2E, $2F, $, $, $, $); //BASE64算法流加密
procedure EncodeStream(InStream, OutStream : TStream);
var
I, O, Count : Integer;
InBuf : array[..] of Byte;
OutBuf : array[..] of Char; //Char
Temp : Byte;
abt:TBytes;
begin
FillChar(OutBuf, Sizeof(OutBuf), #); repeat
Count := InStream.Read(InBuf, SizeOf(InBuf));
if Count = then Break;
I := ;
O := ;
while I <= (Count-) do begin
{ 编码第一个字节 }
Temp := (InBuf[I] shr );
OutBuf[O] := Char(BASE64Table[Temp and $3F]); { 编码第二个字节 }
Temp := (InBuf[I] shl ) or (InBuf[I+] shr );
OutBuf[O+] := Char(BASE64Table[Temp and $3F]); { 编码第三个字节 }
Temp := (InBuf[I+] shl ) or (InBuf[I+] shr );
OutBuf[O+] := Char(BASE64Table[Temp and $3F]); { 编码第四个字节 }
Temp := (InBuf[I+] and $3F);
OutBuf[O+] := Char(BASE64Table[Temp]); Inc(I, );
Inc(O, );
end; if (I <= Count) then begin
Temp := (InBuf[I] shr );
OutBuf[O] := Char(BASE64Table[Temp and $3F]); { 一个奇数字节 }
if I = Count then begin
Temp := (InBuf[I] shl ) and $;
OutBuf[O+] := Char(BASE64Table[Temp and $3F]);
OutBuf[O+] := '=';
{ 两个基数字节 }
end else begin
Temp := ((InBuf[I] shl ) and $) or ((InBuf[I+] shr ) and $0F);
OutBuf[O+] := Char(BASE64Table[Temp and $3F]);
Temp := (InBuf[I+] shl ) and $3C;
OutBuf[O+] := Char(BASE64Table[Temp and $3F]);
end;
{ 增加= }
OutBuf[O+] := '=';
Inc(O, );
end; { 把编码好的块写到流中 }
OutStream.Write(OutBuf, O*); // Modified by for xe8 2015-07-30 15:36:51 o > o*2
until Count < SizeOf(InBuf);
end; //BASE64算法流解密
procedure DecodeStream(InStream, OutStream : TStream);
var
I, O, Count, c1, c2, c3 : Byte;
InBuf : array[..] of Byte;
OutBuf : array[..] of Byte;
begin
repeat
O := ;
I := ; Count := InStream.Read(InBuf, SizeOf(InBuf));
if (Count = ) then
Break; { 解密的数据输入到流中 }
while I < Count do begin
if (InBuf[I] < ) or (InBuf[I] > ) or
(InBuf[I+] < ) or (InBuf[I+] > ) or
(InBuf[I+] < ) or (InBuf[I+] > ) or
(InBuf[I+] < ) or (InBuf[I+] > ) then
raise Exception.Create('Invalid Base64 Character'); c1 := BASE64DeTable[InBuf[I]];
c2 := BASE64DeTable[InBuf[I+]];
c3 := BASE64DeTable[InBuf[I+]];
OutBuf[O] := ((c1 shl ) or (c2 shr ));
Inc(O);
if Char(InBuf[I+]) <> '=' then begin
OutBuf[O] := ((c2 shl ) or (c3 shr ));
Inc(O);
if Char(InBuf[I+]) <> '=' then begin
OutBuf[O] := ((c3 shl ) or BASE64DeTable[InBuf[I+]]);
Inc(O);
end;
end;
Inc(I, );
end;
OutStream.Write(OutBuf, O);
until Count < SizeOf(InBuf);
end; //BASE64算法字符串加密
function Base64Encryption(const Input:String):String;
var
InStream : TMemoryStream;
OutStream : TMemoryStream;
begin
InStream := TMemoryStream.Create;
OutStream := TMemoryStream.Create; InStream.Write(Input[], Length(Input));
InStream.Position := ;
EncodeStream(InStream, OutStream);
OutStream.Position := ;
SetLength(Result, OutStream.Size);
OutStream.Read(Result[], OutStream.Size); InStream.Free;
OutStream.Free;
end; //BASE64算法字符串解密
function Base64Decryption(const Input:String):String;
var
InStream : TMemoryStream;
OutStream : TMemoryStream;
begin
InStream := TMemoryStream.Create;
OutStream := TMemoryStream.Create; InStream.Write(Input[], Length(Input));
InStream.Position := ;
DecodeStream(InStream, OutStream);
OutStream.Position := ;
SetLength(Result, OutStream.Size);
OutStream.Read(Result[], OutStream.Size); InStream.Free;
OutStream.Free;
end; end.
老 base64 for xe8的更多相关文章
- [分享黑科技]纯js突破localstorage存储上线,远程抓取图片,并转码base64保存本地,最终实现整个网站所有静态资源离线到用户手机效果却不依赖浏览器的缓存机制,单页应用最新黑科技
好久没有写博客了,想到2年前答应要放出源代码的也没放出来,最近终于有空先把纯js实现无限空间大小的本地存储的功能开源了,项目地址https://github.com/xueduany/localsto ...
- 使用Qpython3制作老版天翼飞TP路由器拨号脚本
#幻境拨号python版 #by 1414641776 account='xxxxxx@96301' password='xxxxx' # 路由器脚本 def sendToRoute(account, ...
- Python之数据加密与解密及相关操作(hashlib模块、hmac模块、random模块、base64模块、pycrypto模块)
本文内容 数据加密概述 Python中实现数据加密的模块简介 hashlib与hmac模块介绍 random与secrets模块介绍 base64模块介绍 pycrypto模块介绍 总结 参考文档 提 ...
- 前端性能优化--图片处理(Css Sprites 与 base64)
前言: 近期研究着前端性能的优化方面的知识,并以博客记之.之前有相同系列的文章(前端性能优化--图片懒加载(lazyload image)),这次继续是关于图片的处理,css sprites 和 ba ...
- 微信小程序语音识别服务搭建全过程解析(https api开放,支持新接口mp3录音、老接口silk录音)
silk v3(或新录音接口mp3)录音转olami语音识别和语义处理的api服务(ubuntu16.04服务器上实现) 重要的写在前面 重要事项一: 所有相关更新,我优先更新到我个人博客中,其它地方 ...
- 将不确定变为确定~老赵写的CodeTimer是代码性能测试的利器
首先,非常感谢赵老大的CodeTimer,它让我们更好的了解到代码执行的性能,从而可以让我们从性能的角度来考虑问题,有些东西可能我们认为是这样的,但经理测试并非如何,这正应了我之前的那名话:“机器最能 ...
- Python之数据加密与解密及相关操作(hashlib、hmac、random、base64、pycrypto)
本文内容 数据加密概述 Python中实现数据加密的模块简介 hashlib与hmac模块介绍 random与secrets模块介绍 base64模块介绍 pycrypto模块介绍 总结 参考文档 提 ...
- Python常用模块--base64
作用:对一些保密性不强的信息进行加密,变为人类不能直接理解的字符串,但是可以反向解密,是一种‘防君子,不防小人’的措施. 例如:在一些项目中,接口的报文是通过base64加密传输的,所以在进行接口自动 ...
- 使用base64转码的方式上传图片
1.前端html代码 <input style="width:100%" onchange="loadpicture(1)" type="fil ...
随机推荐
- JVM工作原理
作为一种阅读的方式了解下jvm的工作原理 JVM工作原理和特点主要是指操作系统装入JVM是通过jdk中Java.exe来完成,通过下面4步来完成JVM环境. 1.创建JVM装载环境和配置 2.装载JV ...
- 线程——QQ邮件发送
一.造一个QQ邮件发送的窗体 二.开始编写关于邮件发送的代码,以及当点发送按钮的时候,给发送按钮单独造了一个新的线程.这样如果发送的附件太多的话,如果不给发送按钮造新的线程,便会卡住,但是如果给发送按 ...
- 用AngularJS开发下一代Web应用 系列入门基础教程
开篇介绍 AngularJS是什么东西?我觉得不用再描述了.可自行去充电一下.按照惯例,让我们先看看一个Hello World的开门简介吧. <!doctype html> <htm ...
- Web Forms vs Web MVC
MVC相对于WebForm来说更难学习,但性能优于WebForm,比较适合大型项目,开发成本较高,但耦合度低,易于维护,没有太多的现成控件,开发效率较低.对WebForm有基础的人反而不太容易学MVC ...
- ecshop 文章列表页调用描述信息啊
1.打开 includes/lib_article.php文件 将 $sql = 'SELECT article_id, title, author, add_time, file_url, open ...
- Spring IOC 三种注入方式
1. 接口注入 2. setter注入 3. 构造器注入 对象与对象之间的关系可以简单的理解为对象之间的依赖关系:A类需要B类的一个实例来进行某些操作,比如在A类的方法中需要调用B类 ...
- JVM——垃圾收集算法
1.标记-清除算法 最基础的收集算法,如其名,算法为“标记”和“清除”两个阶段:首先标记出所有需要回收的对象,在标记完成后统一回收所有被标记的对象. 两个不足: 1)效率问题,标记和清除两个过程的效率 ...
- 浅谈C#浅拷贝和深拷贝
近来爱上一本书<编写高质量代码,改善C#程序的157个建议>,我想很多人都想编写高质量的代码,因为我们不仅仅是码农,更是一名程序员. 从今天开始,我将每天和大家分享这本书中的内容,并加上自 ...
- Effective java笔记6--异常
充分发挥异常的优点,可以提高一个程序的可读性.可靠性和可维护性.如果使用不当的话,它们也会带来负面影响. 一.只针对不正常的条件才使用异常 先看一段代码: //Horrible abuse of ex ...
- Delphi MDI程序 父窗体如何调用当前活动子窗体的函数/过程
一个MDI文本文件编辑器打开了N个子窗体子窗体的.pas文件有一些public的过程和函数我想在父窗体调用当前活动的子窗体函数我用Self.ActiveChildForm无法调用直接frmEdit.x ...