#include <stdio.h>
const char base[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
char* base64_encode(const char* data, int data_len);
char *base64_decode(const char* data, int data_len);
static char find_pos(char ch);
int main(int argc, char* argv[])
{
char *t = "那个abcd你好吗,哈哈,ANMOL";
int i = 0;
int j = strlen(t);
char *enc = base64_encode(t, j);
int len = strlen(enc);
char *dec = base64_decode(enc, len);
printf("\noriginal: %s\n", t);
printf("\nencoded : %s\n", enc);
printf("\ndecoded : %s\n", dec);
free(enc);
free(dec);
return 0;
}
char *base64_encode(const char* data, int data_len)
{
int prepare = 0;
int ret_len;
int temp = 0;
char *ret = NULL;
char *f = NULL;
int tmp = 0;
char changed[4];
int i = 0;
ret_len = data_len / 3;
temp = data_len % 3;
if (temp > 0)
{
ret_len += 1;
}
ret_len = ret_len*4 + 1;
ret = (char *)malloc(ret_len);
if ( ret == NULL)
{
printf("No enough memory.\n");
exit(0);
}
memset(ret, 0, ret_len);
f = ret;
while (tmp < data_len)
{
temp = 0;
prepare = 0;
memset(changed, '\0', 4);
while (temp < 3)
{
if (tmp >= data_len)
{
break;
}
prepare = ((prepare << 8) | (data[tmp] & 0xFF));
tmp++;
temp++;
}
prepare = (prepare<<((3-temp)*8));
for (i = 0; i < 4 ;i++ )
{
if (temp < i)
{
changed[i] = 0x40;
}
else
{
changed[i] = (prepare>>((3-i)*6)) & 0x3F;
}
*f = base[changed[i]];
f++;
}
}
*f = '\0';
return ret;
}
static char find_pos(char ch)
{
char *ptr = (char*)strrchr(base, ch);
return (ptr - base);
}
char *base64_decode(const char *data, int data_len)
{
int ret_len = (data_len / 4) * 3;
int equal_count = 0;
char *ret = NULL;
char *f = NULL;
int tmp = 0;
int temp = 0;
char need[3];
int prepare = 0;
int i = 0;
if (*(data + data_len - 1) == '=')
{
equal_count += 1;
}
if (*(data + data_len - 2) == '=')
{
equal_count += 1;
}
if (*(data + data_len - 3) == '=')
{
equal_count += 1;
}
switch (equal_count)
{
case 0:
ret_len += 4;
break;
case 1:
ret_len += 4;
break;
case 2:
ret_len += 3;
break;
case 3:
ret_len += 2;
break;
}
ret = (char *)malloc(ret_len);
if (ret == NULL)
{
printf("No enough memory.\n");
exit(0);
}
memset(ret, 0, ret_len);
f = ret;
while (tmp < (data_len - equal_count))
{
temp = 0;
prepare = 0;
memset(need, 0, 4);
while (temp < 4)
{
if (tmp >= (data_len - equal_count))
{
break;
}
prepare = (prepare << 6) | (find_pos(data[tmp]));
temp++;
tmp++;
}
prepare = prepare << ((4-temp) * 6);
for (i=0; i<3 ;i++ )
{
if (i == temp)
{
break;
}
*f = (char)((prepare>>((2-i)*8)) & 0xFF);
f++;
}
}
*f = '\0';
return ret;
}
<script type="text/javascript">
$(function () {
$('pre.prettyprint code').each(function () {
var lines = $(this).text().split('\n').length;
var $numbering = $('<ul/>').addClass('pre-numbering').hide();
$(this).addClass('has-numbering').parent().append($numbering);
for (i = 1; i <= lines; i++) {
$numbering.append($('<li/>').text(i));
};
$numbering.fadeIn(1700);
});
});
</script>
分享到:
相关推荐
C语言实现Base64编码通常涉及到以下几个核心概念和步骤: 1. **Base64字符集**: Base64编码使用64个字符来表示二进制数据,这些字符包括大写字母(A-Z)、小写字母(a-z)、数字(0-9)以及两个特殊字符`+`和`/`...
C语言实现Base64编码通常包括以下几个步骤: 1. **预处理**:检查输入数据的长度,如果不足3字节,则需要在末尾填充0字节,以保证可以完整地分组。 2. **分组**:将输入数据按照每3字节一组进行划分。 3. **编码*...
Base64是网络上最常见的用于传输8Bit字节码的编码方式之一,Base64就是一种基于64个可打印字符来表示二...本资源使用C语言实现Base64加密和解密,可以实现数据的加密和文件的加密,不借助任何的第三方工具,便于移植。
用c语言实现的base64,包括加密算法和解密算法。
在"C语言实现Base64编码与解码"的项目中,我们有`Encode.c`这个源文件,它包含了Base64编码和解码的实现。下面我们将深入探讨Base64的基本原理以及如何用C语言来实现。 1. **Base64编码原理**: - Base64编码基于...
Base64是一种编码方式,常用于在网络上传输二...以上就是关于C语言实现Base64编解码的相关知识点,包括原理、关键步骤、注意事项以及可能的实现代码片段。理解并掌握这些内容,你就可以编写出自己的Base64编码库了。
综上所述,C语言实现Base64编码与解码涉及到了二进制数据的处理、字符串操作、字符映射、内存管理和错误处理等多个方面的知识。通过理解和掌握这些概念,可以编写出高效、可靠的Base64工具。在提供的压缩包文件中,...
总的来说,C语言实现Base64编码解码需要深入理解二进制数据和字符编码之间的转换,并能熟练运用位运算和字符串处理技术。通过这个过程,不仅可以学习到编码解码的基本原理,还能锻炼C语言编程能力。
C语言实现Base64编码通常需要处理边界情况,如不足三位的数据,通过添加填充位(通常是"=")来完成。 在提供的压缩包中,有`.c`和`.h`文件,这些是C语言源代码和头文件。例如,`base16.c`和`base16.h`组合包含了...
base64的C语言实现,能够快速实现base64的编解码
base64编码与解码C语言实现(带注释说明原理) 其中包括:base64编码接口和base64解码接口
C语言实现Base64编码和解码是常见的编程任务,它涉及字符映射、位操作和缓冲区管理等核心概念。 Base64编码的基本原理是将每3个字节(24位)的数据转换为4个6位的“Base64字符”,这样可以确保所有的二进制数据都能...
C语言是编程语言的基础,被广泛应用于系统编程和嵌入式开发,因此一个C语言实现的Base64编码解码库对于开发者来说非常有用。下面将详细介绍这个名为"C语言base64编码解码库"的资源。 该库是从GitHub上获取的,这...
C语言实现Base64编解码可以帮助开发者在C程序中处理这类数据转换需求。 在C语言中实现Base64编解码,通常包括以下几个关键步骤: 1. **编码过程**: - **分组**:将输入的二进制数据按3个字节一组进行处理,不足3...
C语言实现Base64加密和解密通常涉及以下几个步骤: 1. **编码过程**:首先,将输入的二进制数据按每3个字节分组,然后将每个组转换为4个6位的二进制数,接着将这4个二进制数映射到Base64字符集中对应的字符。对于...
Base64编码的核心原理是将二进制数据进行分组,每24Bit(3字节)为一个大组,再把一个大组的数据分成4个6Bit的小分组。由于6Bit数据只能表示64个不同的字符(2^6=64),所以这也是Base64的名字由来。
在C语言中实现Base64编码解码需要了解编码和解码的算法。 Base64编码算法: Base64编码算法将二进制数据分成每三个字节一组,对每组数据进行编码。编码过程包括三个步骤: 1. 将二进制数据分成每三个字节一组。 2...
C语言中的Base64编解码函数可以帮助开发者在程序中实现这种转换。 首先,我们要理解Base64的编码原理。Base64编码表包含64个可打印的ASCII字符:A-Z、a-z、0-9、'+'和'/'。每个6位的数字对应一个字符,第65和66个...