1. 程式人生 > >BASE64編解碼

BASE64編解碼

Openssl中用於base64編解碼的函式主要有:

1)  編碼函式

Ø         EVP_EncodeInit函式

原型:void EVP_EncodeInit(EVP_ENCODE_CTX *ctx);

功能:該函式初始化一個用來進行base64編碼的結構,事實上,該函式只是簡單設定了結構裡面幾個常量的長度。

引數:

ctx:base64裝置上下文。

Ø         EVP_EncodeUpdate函式

原型:void EVP_EncodeUpdate(EVP_ENCODE_CTX *ctx,unsigned char *out,int *outl,unsigned char *in,int inl);

功能:該函式將引數in裡面的inl自己資料拷貝到結構體ctx裡面,如果結構體裡面有資料,就同時將結構體裡面的資料進行BASE64編碼並輸出到引數out指向的快取裡面,輸出資料的長度儲存在outl裡面。注意,在第一次呼叫本函式的時候,雖然往結構體裡面拷貝資料了,但是結構體ctx裡面開始是沒有輸入資料存在並且輸入資料長度不超出ctx內部儲存資料的最長限制,就不會有任何資料被進行BASE64編碼,也就是說,不會有任何資料輸出;但是如果輸入資料長度比內部儲存的資料長,那麼就會輸出部分經過BASE64編碼的資料。資料輸出總是在下一層輸入前完成的。

引數:

ctx:base64裝置上下文。

out:存放編碼後的資料緩衝區。

outl:編碼後的資料長度。

in:編碼前的資料。

inl:編碼前的資料長度。

Ø         EVP_EncodeFinal函式

原型:void EVP_EncodeFinal(EVP_ENCODE_CTX *ctx,unsigned char *out,int *outl);

功能:該函式將結構體ctx裡面剩餘資料進行BASE64編碼並寫入到引數out裡面去,輸出資料的長度儲存在outl裡面。

引數:

ctx:base64裝置上下文。

out:存放編碼後的資料。

outl:編碼後的資料長度。

Ø         EVP_EncodeBlock函式

原型:int EVP_EncodeBlock(unsigned char *t, const unsigned char *f, int n);

功能:該函式將引數f裡面的字串裡面的n個位元組的字串進行BASE64編碼並輸出到引數t裡面。返回資料的位元組長度。事實上,在函式EVP_EncodeUpdate和EVP_EncodeFinal裡面就呼叫了該函式完成BASE64編碼功能。

引數:

t:接收編碼後的資料緩衝區。

f:編碼前的資料。

n:編碼前的資料長度。

2)  解碼函式

Ø         EVP_DecodeInit函式

原型:void EVP_DecodeInit(EVP_ENCODE_CTX *ctx);

功能:該函式初始化一個用來進行BASE64解碼的資料結構。

引數:

ctx:base64裝置上下文。

Ø         EVP_DecodeUpdate函式

原型:int EVP_DecodeUpdate(EVP_ENCODE_CTX *ctx,unsigned char *out,int *outl,unsigned char *in, int inl);

功能:該函式將引數in裡面inl位元組的資料拷貝到結構體ctx裡面。如果結構體裡面已經有資料,那麼這些資料就會先進行BASE64解碼,然後輸出到引數out指向的記憶體中,輸出的位元組數儲存在引數outl裡面。輸入資料為滿行的資料時,返回為1;如果輸入資料是最後一行資料的時候,返回0;返回-1則表明出錯了。

引數:

ctx:base64裝置上下文。

out:存放解碼後的資料緩衝區。

outl:解碼後的資料長度。

in:解碼前的資料。

inl:解碼前的資料長度。

Ø         EVP_DecodeFinal函式

原型:int EVP_DecodeFinal(EVP_ENCODE_CTX *ctx, unsigned char *out, int *outl);

功能:該函式將結構體ctx裡面剩餘的資料進行BASE64解碼並輸出到引數out指向的記憶體中,輸出資料長度為outl位元組。成功返回1,否則返回-1。

引數:

ctx:base64裝置上下文。

out:解碼後的資料。

outl:解碼後的資料長度。

Ø         EVP_DecodeBlock函式

原型:int EVP_DecodeBlock(unsigned char *t, const unsigned char *f, int n);

功能:該函式將字串f中的n位元組資料進行BASE64解碼,並輸出到t指向的記憶體中,輸出資料長度為outl。成功返回解碼的資料長度,返回返回-1。

引數:

t:接收解碼後的資料緩衝區。

f:解碼前的資料。

       n:解碼前的資料長度。

相關推薦

Android中使用commons-codec-1.6.jar 進行Base64解碼出現的問題

deb 分享 == 通過 HR common jar hive java 編碼時出現異常: java.lang.NoSuchMethodError: No static method encodeBase64String([B)Ljava/lang/String; i

在C語言中使用Libb64進行Base64解碼

tar 語言 number const string ken doc get eof Libb64下載地址http://sourceforge.net/projects/libb64 以下為Demo CLibb64Demo.c #include <stdio.h&g

python3url解碼base64解碼ASE加解密

字元編解碼 Python3相對於Python2的一大改變就是,對預設字元型別進行了修改。Python2中定義字串預設為二進位制字串,強制加字首u的才是unicode字串;而Python3中字串預設為unicode,強制加字首b的才是二進位制字串。(也就是剛好反過來了) 這裡的二進位制字串:指

Java實現Base64解碼

為什麼要用Base64編碼 在網路中傳輸資料都是使用ascii方式傳輸。對於一些圖片、視訊等資料,可能就會被編碼成ascii中不可見部分的編碼。網路中不同的路由裝置處理方式不同,有可能就會把這部分資料弄丟了。為了保證資料傳輸的正確性,可以使用Base64編碼將這些不可見資料編碼成可見資料。 Java實現B

python3字串base64解碼

首先,Base64生成的編碼都是ascii字元。 其次,python3中字元都為unicode編碼,而b64encode函式的引數為byte型別,所以必須先轉碼。 s = "你好" bs = base64.b64encode(s.encode("utf-8")) # 將字元為unicode編碼轉換

python3的base64解碼

-s == base64編碼 des 都是 itl bit 實現 python3 使用python3的base64編解碼實現字符串的簡易加密解密 引言:   在一些項目中,接口的報文是通過base64加密傳輸的,所以在進行接口自動化時,需要對所傳的參數進行base64編碼,

c語言通過openssl aes對稱加解密和base64解碼將密碼儲存成密文

今天遇到這樣一個問題,將客戶端中的一個密碼儲存到檔案中以供下次使用,但是儲存的密碼不能直接儲存明文,需要進行加密處理,再三考慮之後,這個加密的過程需要雙向的可逆的過程,MD5等方式是不適用的,因為記住密碼意味著下次我還需要還原這個密碼進行使用,所以最後選擇了openssl的aes演算法,然而ae

delphi Base64 解碼

Delphi 自帶了 Base64 編解碼的單元,叫 EncdDecd,這名字很拗口而且不直觀,估計這是一直很少人關注和知道的原因。 這個單元提供兩套四個公開函式: 對流的編解碼: procedure EncodeStream(Input, Output: TStrea

C++實現base64解碼

將昨天的php程式碼改造成C++ /*base_64.h檔案*/ #ifndef BASE_64_H #define BASE_64_H /** * Base64 編碼/解碼 * @author liruixing */ class Base64{ private: std

[c++]base64解碼 and image

      //½«Í¼ÏñתΪbase64¸ñʽ vector&l

boost庫實現Base64解碼

  Base64介紹 Base64是一種基於64個可列印字元來表示二進位制資料的表示方法,從本質上看Base64編碼就是將三位元組轉換為四位元組,如果資料的長度不是3的整數倍,就要在後面補0再計算,每補2個0就再Base64串後加上1個‘=’。 boost庫Base64

base64解碼原始碼解析

base64 decode const char * base64char = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";//可以自己定製,比如說把+和/改成-和_

PHP檔案讀寫,Base64解碼

PHP讀寫檔案 //讀取檔案流 $fileData = file_get_contents("aaa.png"); //將檔案寫入本地 file_put_contents("bbb.png", $fileData); Base64編解碼 data=base6

Android實戰技巧之三十七:圖片的Base64解碼

通常用Base64這種編解碼方式將二進位制資料轉換成可見的字串格式,就是我們常說的大串,10塊錢一串的那種,^_^。 Android的android.util包下直接提供了一個功能十分完備的Base64類供我們使用,下面就演示一下如何將一張圖片進行Base64

可以相互解密的C#版及C++版DES演算法程式碼(包括ECB、CBC模式,Zeros、PKCS7填充,以及Base64解碼)

由於C#中對於DES演算法有標準類,所以使用起來特別簡單;但C++就有點費勁了,經過整合網上資源並修改bug,現在放出完整C++DES演算法程式碼,已測試通過。這裡要特別感謝http://blog.csdn.net/bengold1979/article/details/2

Base64解碼(C++版) (轉)

標頭檔案h#include <string>using namespace std;class ZBase64{public:    /*編碼    DataByte        [in]輸入的資料長度,以位元組為單位    */    string Encode(const unsigned

C++ 實現圖片base64解碼

最近使用人臉識別restfulAPI遇到了要求圖片base64編碼後傳輸問題。 藉此機會瞭解下什麼是base64編碼。 1 什麼是base64編碼 所謂Base64,就是說選出64個字元—-小寫字母a-z、大寫字母A-Z、數字0-9、符號”+”、”

BASE64解碼

Openssl中用於base64編解碼的函式主要有: 1)  編碼函式 Ø         EVP_EncodeInit函式 原型:void EVP_EncodeInit(EVP_ENCODE_CTX *ctx); 功能:該函式初始化一個用來進行base64編碼的結構,事實上,該函式只是簡單設定了結構裡面幾

Java實現BASE64解碼 maven

   Java語言提供了一個非常好的BASE64演算法的實現,即Apache Commons Codec工具包。其MAVEN配置如下, </dependency>     <!-- https://mvnrepository.com/artifact/c

[紹棠_Swift] Swift中使用Base64解碼

/// swift Base64處理 /**      *   編碼      */ func base64Encoding(plainString:String)->String