当前位置:首页 » 编程语言 » 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