日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

c++Builder XE6 MD5 加密算法 BASE64 URL 编码

發(fā)布時間:2025/1/21 c/c++ 97 豆豆
生活随笔 收集整理的這篇文章主要介紹了 c++Builder XE6 MD5 加密算法 BASE64 URL 编码 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
xe6,xe7 BASE64
XE6 MD5 加密算法

Delphi

function MD5(const texto: string): string; varidmd5: TIdHashMessageDigest5; beginidmd5 := TIdHashMessageDigest5.Create;tryresult := idmd5.HashStringAsHex(texto);finallyidmd5.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方法有問題?
最終原因是加上參數(shù)IndyTextEncoding_UTF8()就可以了。字符編碼不正確。
  • BASE64
XE6的base64編碼與xe7不同,區(qū)別在于對漢字的處理,漢字的編碼值不一樣。
XE7:move base64 function to System.NetEncoding.hpp
Soap::Encddecd::EncodeString默認是UnicodeString,漢字也是Unicode再進行編碼。
XE6:EncodeString默認是AnsiString,漢字也是按ascii碼進行b64編碼的。
所以xe6、xe7對漢字的b64編碼不一樣。

在XE7里如果用舊的ascii編碼方式,可以調(diào)用AnsiString __fastcall EncodeBase64(const void * Input, int Size)函數(shù)實現(xiàn)。 String ustring = Memo1->Text;AnsiString as = AnsiString(ustring);Memo2->Text = Soap::Encddecd::EncodeBase64(as.c_str(), as.Length());

?

XE里沒有idbase64decoder控件了。

Delphi 自帶了 Base64 編解碼的單元,叫 EncdDecd,這名字很拗口而且不直觀,估計這是一直很少人關(guān)注和知道的原因。

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(0);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


這個單元提供兩套四個公開函數(shù):

對流的編解碼:
procedure EncodeStream(Input, Output: TStream); // 編碼
procedure DecodeStream(Input, Output: TStream); // 解碼

// 對字符串的編解碼:
function EncodeString(const Input: string): string; // 編碼
function DecodeString(const Input: string): string; // 解碼

這幾個函數(shù)在幫助中沒有。應(yīng)該不算是標準庫中的函數(shù)。

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

?

根據(jù)RFC822規(guī)定,每76個字符,還需要加上一個回車換行

如果不用換行符,自己創(chuàng)建類,用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里含有漢字需要轉(zhuǎn)換一下

?

XE6XE7

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

總結(jié)

以上是生活随笔為你收集整理的c++Builder XE6 MD5 加密算法 BASE64 URL 编码的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。