當前位置:首頁 » 編程語言 » base64編碼c語言
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

base64編碼c語言

發布時間: 2022-06-14 21:13:24

Ⅰ base64編碼是什麼意思啊

Base64是網路上最常見的用於傳輸8Bit位元組代碼的編碼方式之一,大家可以查看RFC2045~RFC2049,上面有MIME的詳細規范。Base64編碼可用於在HTTP環境下傳遞較長的標識信息。例如,在Java Persistence系統Hibernate中,就採用了Base64來將一個較長的唯一標識符(一般為128-bit的UUID)編碼為一個字元串,用作HTTP表單和HTTP GET URL中的參數。在其他應用程序中,也常常需要把二進制數據編碼為適合放在URL(包括隱藏表單域)中的形式。此時,採用Base64編碼具有不可讀性,即所編碼的數據不會被人用肉眼所直接看到。

Ⅱ C 中怎麼將2進制字元串進行Base64編碼

在 ATLENC.H 里有一個庫函數:
BOOL Base64Encode(
_In_reads_(nSrcLen) const BYTE *pbSrcData,
_In_ int nSrcLen,
_When_(*pnDestLen > 0, _Out_writes_to_(*pnDestLen, *pnDestLen)) LPSTR szDest,
_Inout_ int *pnDestLen,
_In_ DWORD dwFlags = ATL_BASE64_FLAG_NONE)

用法:

input: buf(byte), buflen, out StringA, outLen, 轉換模式.
Base64Encode(buf,buflen,strA.GetBuffer(outlen),&outlen, ATL_BASE64_FLAG_NONE))

Ⅲ VC++問題,怎麼對一個音頻文件進行base64編碼最好給一個函數

BASE64可以用來將binary的位元組序列數據編碼成ASCII字元序列構成的文本。完整的BASE64定義可見 RFC1421和 RFC2045。編碼後的數據比原始數據略長,為原來的4/3。在電子郵件中,根據RFC822規定,每76個字元,還需要加上一個回車換行。

轉換的時候,將三個byte的數據,先後放入一個24bit的緩沖區中,先來的byte占高位。數據不足3byte的話,於緩沖區中剩下的Bit用0補足。然後,每次取出6個bit,按照其值選擇+/中的字元作為編碼後的輸出。不斷進行,直到全部輸入數據轉換完成。如果最後剩下兩個輸入數據,在編碼結果後加1個「=」;如果最後剩下一個輸入數據,編碼結果後加2個「=」;如果沒有剩下任何數據,就什麼都不要加,這樣才可以保證資料還原的正確性。

Ⅳ 高分求解:c語言的一個簡單問題

.NET 裡面有這樣的解碼的,自己找個書好好看下就知道了.結帖吧

Ⅳ C語言編程:編寫一個函數base64加密

#include<stdio.h>
#include<stdlib.h>
#include<string.h>

constchar*chlist="+/";

intencode_string(char*str,unsignedintlength,char*stat){
chars[103];
inti,j;
unsignedtemp;
if(length<=0)return1;
if(length>100)return2;
str[length]='';
strcpy(s,str);
while(strlen(s)%3)strcat(s,"=");
for(i=0,j=0;s[i];i+=3,j+=4){
temp=s[i];
temp=(temp<<8)+s[i+1];
temp=(temp<<8)+s[i+2];
stat[j+3]=chlist[temp&0X3F];
temp>>=6;
stat[j+2]=chlist[temp&0X3F];
temp>>=6;
stat[j+1]=chlist[temp&0X3F];
temp>>=6;
stat[j+0]=chlist[temp&0X3F];
}
stat[j]='';
return0;
}

intIndex(charch){
inti;
for(i=0;chlist[i];++i){
if(chlist[i]==ch)
returni;
}
return-1;
}

voiddecode_string(char*s,char*t){
unsignedtemp;
inti,j,k,len=strlen(s);
if(len%4){
printf("無效數據。 ");
exit(2);
}
for(i=0,j=0;i<=len;i+=4,j+=3){
temp=0;
for(k=0;k<4;++k)
temp=(temp<<6)+Index(s[i+k]);
for(k=2;k>=0;--k){
t[j+k]=temp&0XFF;
temp>>=8;
}
}
t[j+k]='';
}

intmain(){
chars[100]="1a2a3s4dff5fj6u7M8B9P0O1U2";
chart[150],u[100];
printf("s=%s ",s);
encode_string(s,strlen(s),t);
printf("t=%s ",t);
decode_string(t,u);
printf("u=%s ",u);
return0;
}

Ⅵ c語言:\0開頭的字元串用gets獲取的可成功進行base64編碼和還原,而通過命令行參數則不行。為什麼

為什麼你要輸入\0開頭的字元串
有什麼含義?

Ⅶ C語言的Base64解碼

加一個break跳出循環即可。

#include<stdio.h>
#include<string.h>
intmain(void)
{
chary[4000]/*原文本*/,b[3999*4/3]/*待解的Base64碼*/,mb[64]/*Base64碼表*/;
inti,j/*i,j為兩個計數用的變數*/,zu/*將待解的Base64碼分成4個字元一組,zu用於記錄第幾組*/;
for(i=0;i<26;++i)mb[i]=i+65;
for(i=0;i<26;++i)mb[i+26]=i+97;
for(i=0;i<10;++i)mb[i+52]=i+48;
mb[62]='+';
mb[63]='/';/*對碼表賦值*/
for(i=0;i<4000;++i)y[i]=0;
for(i=0;i<3999*4/3;b[i++]=0);/*清空兩個字元串*/
fgets(b,3999*4/3-1,stdin);/*輸入Base64碼*/
for(i=0;i<strlen(b)-1;++i)/*處理b中的每個字元*/
for(j=0;j<64;++j)
if(mb[j]==b[i])
{
b[i]=j; /*尋找各字元對應的碼表序號,貌似就是這里出的問題*/
break;/*一找到就跳出,可避免重復比較。沒有這句會重復比較到最後,如果j的值剛好落在字元數字的ASCII碼中,會引起的重復的給b[i]賦值*/
}
for(zu=0;zu<(strlen(b)-1)/4;++zu)/*Base64解碼*/
{
y[zu*3+0]=((b[zu*4+0]<<2))|(b[zu*4+1]>>4);
y[zu*3+1]=((b[zu*4+1]<<4))|(b[zu*4+2]>>2);
y[zu*3+2]=((b[zu*4+2]<<6))|b[zu*4+3];
}
printf("%s ",y);/*輸出原文本*/
return0;
}

Ⅷ c語言怎樣用base64實現迅雷地址轉換

葉劍飛
*
*
*
* 使用說明:
* 命令行參數說明:若有「-d」參數,則為base64解碼,否則為base64編碼。
* 若有「-o」參數,後接文件名,則輸出到標准輸出文件。
* 輸入來自標准輸入stdin,輸出為標准輸出stdout。可重定向輸入輸出流。
*
* base64編碼:輸入任意二進制流,讀取到文件讀完了為止(鍵盤輸入則遇到文件結尾符為止)。
* 輸出純文本的base64編碼。
*
* base64解碼:輸入純文本的base64編碼,讀取到文件讀完了為止(鍵盤輸入則遇到文件結尾符為止)。
* 輸出原來的二進制流。
*
*/

Ⅸ base64編碼是什麼意思

Base64是網路上最常見的用於傳輸8Bit位元組碼的編碼方式之一,Base64就是一種基於64個可列印字元來表示二進制數據的方法。

Base64編碼是從二進制到字元的過程,可用於在HTTP環境下傳遞較長的標識信息。採用Base64編碼具有不可讀性,需要解碼後才能閱讀。

Base64由於以上優點被廣泛應用於計算機的各個領域,然而由於輸出內容中包括兩個以上「符號類」字元(+, /, =),不同的應用場景又分別研製了Base64的各種「變種」。為統一和規范化Base64的輸出,Base62x被視為無符號化的改進版本。

Base64編碼可用於在HTTP環境下傳遞較長的標識信息。例如,在Java Persistence系統Hibernate中,就採用了Base64來將一個較長的一個標識符(一般為128-bit的UUID)編碼為一個字元串,用作HTTP表單和HTTP GET URL中的參數。

在其他應用程序中,也常常需要把二進制數據編碼為適合放在URL(包括隱藏表單域)中的形式。此時,採用Base64編碼不僅比較簡短,同時也具有不可讀性,即所編碼的數據不會被人用肉眼所直接看到。

然而,標準的Base64並不適合直接放在URL里傳輸,因為URL編碼器會把標准Base64中的「/」和「+」字元變為形如「%XX」的形式,而這些「%」號在存入資料庫時還需要再進行轉換,因為ANSI SQL中已將「%」號用作通配符。

為解決此問題,可採用一種用於URL的改進Base64編碼,它不僅在末尾去掉填充的'='號,並將標准Base64中的「+」和「/」分別改成了「-」和「_」,這樣就免去了在URL編解碼和資料庫存儲時所要作的轉換,避免了編碼信息長度在此過程中的增加,並統一了資料庫、表單等處對象標識符的格式。

另有一種用於正則表達式的改進Base64變種,它將「+」和「/」改成了「!」和「-」,因為「+」,「/」以及前面在IRCu中用到的「[」和「]」在正則表達式中都可能具有特殊含義。

此外還有一些變種,它們將「+/」改為「_-」或「._」(用作編程語言中的標識符名稱)或「.-」(用於XML中的Nmtoken)甚至「_:」(用於XML中的Name)。

Ⅹ 什麼是BASE64編碼

Base64是網路上最常見的用於傳輸8Bit位元組代碼的編碼方式之一,在發送電子郵件時,伺服器認證的用戶名和密碼需要用Base64編碼,附件也需要用Base64編碼。
下面簡單介紹Base64演算法的原理,由於代碼太長就不在此貼出
Base64要求把每三個8Bit的位元組轉換為四個6Bit的位元組(3*8 = 4*6 = 24),然後把6Bit再添兩位高位0,組成四個8Bit的位元組,也就是說,轉換後的字元串理論上將要比原來的長1/3。
轉換後,我們用一個碼表來得到我們想要的字元串(也就是最終的Base64編碼),這個表是這樣的:
0 A 17 R 34 i 51 z
1 B 18 S 35 j 52 0
2 C 19 T 36 k 53 1
3 D 20 U 37 l 54 2
4 E 21 V 38 m 55 3
5 F 22 W 39 n 56 4
6 G 23 X 40 o 57 5
7 H 24 Y 41 p 58 6
8 I 25 Z 42 q 59 7
9 J 26 a 43 r 60 8
10 K 27 b 44 s 61 9
11 L 28 c 45 t 62 +
12 M 29 d 46 u 63 /
13 N 30 e 47 v
14 O 31 f 48 w (pad) =
15 P 32 g 49 x
16 Q 33 h 50 y
原文的位元組最後不夠3個的地方用0來補足,轉換時Base64編碼用=號來代替。這就是為什麼有些Base64編碼會以一個或兩個等號結束的原因,但等號最多隻有兩個。
舉一個例子,abc經過Base64編碼以後的結果是YWJj.

發郵件的時候所寫的信息自動在後台轉換然後傳輸...
參考資料: http://www.luocong.com/articles/show_article.asp?Article_ID=17