xe6,xe7 BASE64
XE6 MD5 加密算法 Delphi 字符串MD5

function MD5(const texto: string): string;
var
idmd5: TIdHashMessageDigest5;
begin
idmd5 := TIdHashMessageDigest5.Create;
try
result := idmd5.HashStringAsHex(texto);
finally
idmd5.Free;
end;
end; 通用的BYTES进行MD5
function TMYCLASS.MD5(const texto: string): string;
var
idmd5: TIdHashMessageDigest5;
begin
idmd5 := TIdHashMessageDigest5.create;
try
Result := idmd5.HashBytesAsHex( TidBytes( TEncoding.UTF8.GetBytes(texto) ));
finally
idmd5.Free;
end;
end;

c++builder
#include <IdHashMessageDigest.hpp>

String __fastcall MD5(const String texto)
{
String result;
TIdHashMessageDigest5 *idmd5= new TIdHashMessageDigest5();
try
{
result= idmd5->HashStringAsHex(texto,IndyTextEncoding_UTF8());//IndyTextEncoding_UTF8()可忽略
}
__finally
{
delete idmd5;
}
return result;
}

texto是汉字有bug,
中国:EA03FCB8C47822BCE772CF6C07D0EBBB
北京:EA03FCB8C47822BCE772CF6C07D0EBBB
这2个串是相等的啊!!,难道xe6的HashStringAsHex方法有问题?
最终原因是加上参数IndyTextEncoding_UTF8()就可以了。字符编码不正确。
  • BASE64
XE6的base64编码与xe7不同,区别在于对汉字的处理,汉字的编码值不一样。
XE7:move base64 function to System.NetEncoding.hpp
Soap::Encddecd::EncodeString默认是UnicodeString,汉字也是Unicode再进行编码。
XE6:EncodeString默认是AnsiString,汉字也是按ascii码进行b64编码的。
所以xe6、xe7对汉字的b64编码不一样。 在XE7里如果用旧的ascii编码方式,可以调用AnsiString __fastcall EncodeBase64(const void * Input, int Size)函数实现。
    String ustring = Memo1->Text;
AnsiString as = AnsiString(ustring);
Memo2->Text = Soap::Encddecd::EncodeBase64(as.c_str(), as.Length());

XE里没有idbase64decoder控件了。

Delphi 自带了 Base64 编解码的单元,叫 EncdDecd,这名字很拗口而且不直观,估计这是一直很少人关注和知道的原因。

Berlin,XE7 base64,2016.10.8

xe7中对Encode重载了3种方法。

int __fastcall Encode(TStream*  Input, TStream*  Output)/* overload */;
DynamicArray<Byte> __fastcall Encode(Byte *Input, int Input_High)/* overload */;
UnicodeString __fastcall Encode( UnicodeString Input)/* overload */;
   LEncoder := TBase64Encoding.Create();
Result := LEncoder.Encode('hello');

#include <System.NetEncoding.hpp>

Memo2->Text = TNetEncoding::Base64->Encode(Memo1->Text);

Memo1->Text = TNetEncoding::Base64->Decode(Memo2->Text);

To encode:

bytes: TBytes;
base64 :String;
bytes := TEncoding.UTF8.GetBytes(str);
base64 := TNetEncoding.Base64.EncodeBytesToString(bytes); use String type
b64:=  TNetEncoding.Base64.Encode(astr);

To decode:

bytes := TNetEncoding.Base64.DecodeStringToBytes(base64);
str := TEncoding.UTF8.GetString(bytes);

c++

TBytes bytes;//TByteDynArray bytes;

TNetEncoding::Base64->EncodeBytesToString(&bytes[0], bytes.High);

Soap.EncdDecd.pas

XE 自带的 MD5 单元 MessageDigest_5.pas

这个单元提供两套四个公开函数:

对流的编解码:
procedure EncodeStream(Input, Output: TStream); // 编码
procedure DecodeStream(Input, Output: TStream); // 解码

// 对字符串的编解码:
function EncodeString(const Input: string): string; // 编码
function DecodeString(const Input: string): string; // 解码

这几个函数在帮助中没有。应该不算是标准库中的函数。

c++builder

#include <EncdDecd.hpp>

Soap::Encddecd::EncodeString( edtkl->Text);

String es=Soap::Encddecd::EncodeString("ee");

Soap::Encddecd::EncodeString(es);

http://codeverge.com/embarcadero.delphi.tools/indy-tidhashmessagedigest5-changed-f/1061390

根据RFC822规定,每76个字符,还需要加上一个回车换行

如果不用换行符,自己创建类,用MaxInt

TBase64Encoding *b64e=new TBase64Encoding(MaxInt);
mmoBase->Text = b64e->EncodeBytesToString(&bta[0], bta.High);
delete b64e;

New Unit for Web Encoding and Decoding

The RTL provides a new unit, System.NetEncoding, that provides encoding and decoding features for Base64, HTML, and URL.

The following table shows how methods from previous versions of RAD Studio map to methods in System.NetEncoding:

HTTPEncode、URLEncode、URL编码

HZ=HTTPEncode( "查询功能");//解决在中文汉字编码URL地址乱码的问题

比如TIdHTTP.Get(URL,stream);这个URL里含有汉字需要转换一下

XE6 XE7

Soap.EncdDecd.EncodeBase64

TNetEncoding.Base64.EncodeBytesToString

Soap.EncdDecd.DecodeBase64

TNetEncoding.Base64.DecodeStringToBytes

Soap.EncdDecd.EncodeStream
Soap.EncdDecd.EncodeString

TNetEncoding.Base64.Encode

Soap.EncdDecd.DecodeStream
Soap.EncdDecd.DecodeString

TNetEncoding.Base64.Decode

Web.HTTPApp.HTMLEncode

TNetEncoding.HTML.Encode

Web.HTTPApp.HTMLDecode

TNetEncoding.HTML.Decode

Web.HTTPApp.HTTPEncode

TNetEncoding.URL.Encode

Web.HTTPApp.HTTPDecode

TNetEncoding.URL.Decode

c++Builder XE6 MD5 加密算法 BASE64 URL 编码的更多相关文章

  1. 第13章 Base64 URL编码 - IdentityModel 中文文档(v1.0.0)

    JWT令牌使用Base64 URL编码进行序列化. IdentityModel包括Base64Url帮助编码/解码的类: var text = "hello"; var b64ur ...

  2. Delphi编码与签名【URL编码与解码,Base64编码与解码,MD5加密,HMAC-SHA1、HMAC-SHA224、HMAC-SHA256、HMAC-SHA384和HMAC-SHA512签名】

    作者QQ:(648437169) 点击下载➨delphi编码与签名 [Delphi编码与签名]URL编码与解码,Base64编码与解码,MD5加密,HMAC-SHA1.HMAC-SHA224.HMAC ...

  3. URL编码和Base64编码 (转)

    我们经常会遇到所谓的URL编码(也叫百分号编码)和Base64编码.      先说一下Bsae64编码.BASE64编码是一种常用的将二进制数据转换为64个可打印字符的编码,常用于在通常处理文本数据 ...

  4. 011_如何decode url及图片转为base64文本编码总结

    一.咱们经常会遇到浏览器给encode后的url,如何转换成咱们都能识别的url呢?很简单,talk is easy,Please show me your code,如下所示: (1)英文decod ...

  5. MD5加密算法(信息摘要算法)、Base64算法

    1 什么是MD5 信息摘要算法,可以将字符进行加密,每个加密对象在进行加密后都是等长的 应用场景:将用户密码经过MD5加密后再存储到数据库中,这样即使是超级管理员也没有能力知道用户的具体密码是多少:因 ...

  6. IOS开发之—— 各种加密的使用(MD5,base64,DES,AES)

    基本的单向加密算法: BASE64 严格地说,属于编码格式,而非加密算法 MD5(Message Digest algorithm 5,信息摘要算法)SHA(Secure Hash Algorithm ...

  7. IOS常见的加密方法,常用的MD5和Base64

    iOS代码加密常用加密方式 iOS代码加密常用加密方式,常见的iOS代码加密常用加密方式算法包括MD5加密.AES加密.BASE64加密,三大算法iOS代码加密是如何进行加密的,且看下文 MD5 iO ...

  8. Java学习---MD5加密算法

    前言 在我们日常的程序开发中,或多或少会遇到一些加密/解密的场景,比如在一些接口调用的过程中,我们(Client)不仅仅需要传递给接口服务(Server)必要的业务参数,还得提供Signature(数 ...

  9. iOS开发之—— 加密使用(MD5,base64,DES,AES)

    基本的单向加密算法: BASE64 严格地说,属于编码格式,而非加密算法 MD5(Message Digest algorithm 5,信息摘要算法)SHA(Secure Hash Algorithm ...

随机推荐

  1. CH3602 Counting Swaps

    题意 3602 Counting Swaps 0x30「数学知识」例题 背景 https://ipsc.ksp.sk/2016/real/problems/c.html Just like yeste ...

  2. B树就想到这个

    比如要查找60 先在根结点中查,根结点里面有 17  35这2个关键字, 60 > 35,则从右边开始查找 p3指针开始查找 ,  到了第二层的最右边的那个结点开始查找 , 里面有  65  8 ...

  3. sql server 表变量存储临时查询数据

    对于使用sql server 编写存储过程或者类似的sql 查询的时候我们使用表变量进行临时数据的存储,可以方便我们进行下来的数据处理 表变量的使用类似如下: declare @userinfo ta ...

  4. PHP开源的项目管理软件

    禅道 http://devel.zentao.net/help-book-zentaophphelp.html PHP session详讲 http://blog.163.com/lgh_2002/b ...

  5. tomcat源码阅读之SingleThreadModel

    一.接口简介: 实现了SingleThreadModel接口的servlet类只能保证在同一时刻,只有一个线程执行该servlet实例的service方法,在tomcat实现中会创建多个servlet ...

  6. storm之 Storm 工作原理

    Storm 工作原理 Storm简介 1.Storm是一套分布式的.可靠的,可容错的用于处理流式数据的系统. 2.Storm也是基于C/S架构来进行工作的,C负责将数据处理的方式的jar(Topolo ...

  7. 辅助字符串处理类:org.apache.commons.lang3.StringUtils

    api 地址:http://commons.apache.org/proper/commons-lang/apidocs/index.html?index-all.html StringUtils 常 ...

  8. AppBox Mvc数据库初始化

    下载AppBoxMvc后,以为CTRL_F5运行后就能数据库初始化了.一直报失败 我的环境是VS2017,利用VS2017自带的数据库 后修改: 1.  修改AppBoxContext.cs publ ...

  9. module.exports用法

    module.exports 对象是由模块系统创建的.在我们自己写模块的时候,需要在模块最后写好模块接口,声明这个模块对外暴漏声明内容,module.exports提供了暴漏接口的方法. 1.返回一个 ...

  10. ng-model的用法

    参考: http://www.cnblogs.com/guanglin/p/5200097.html http://www.runoob.com/angularjs/ng-ng-cloak.html ...