c语言 base64 md5 sha1编码与解码

base64 md5 sha1编码与解码

一、如何用c语言对数据编码与解码,这篇主要是使用一个第三方crypto库,已上传至csdn,下载链接在下方。

 

二、crypto库代码文件下载地址(crypto.rar内部只有关于base64、md5、sha1的8个文件)

 1. http://download.csdn.net/download/jxyb2012/10235409


base64算法

一、简介

1.Base64是网络上最常见的用于传输8Bit字节码的编码方式之一。

2.Base64是一种基于64个可打印字符来表示二进制数据的方法。

3.Base64可用于在http环境下传递较长的标识信息。

4.编码后的数据是一个字符串,共64个字符,其中包含的字符为:A-Z、a-z、0-9、+、/。

5.还有第65个字符“=”为填充字符。


二、base64编码对照表

 

三、编码过程

 1.字符串“Xue”经过Base64编码后变为“WHVl”。长度为3个字节的数据位数是8*3=24,可以精确地分成6*4

   

2.如果数据的字节数不是3的倍数,则其位数就不是6的倍数,那么需要就不能精确地划分成6位的块。此时,需在原数据后面添加1个或2个零值字节,使其字节数是3的倍数。然后,在编码后的字符串后面添加1个或2个等号“=”,表示所添加的零值字节数。例:

字符串“Xu”经过Base64编码后变为“WHU=”。


   



md5算法

一、简介

1.压缩性:任意长度的数据,算出的MD5值长度都是固定的。

2.容易计算:从原数据计算出MD5值很容易。

3.抗修改性:对原数据进行任何改动,哪怕只修改1个字节,所得到的MD5值都有很大区别。

4.强抗碰撞:已知原数据和其MD5值,想找到一个具有相同MD5值的数据(即伪造数据)是非常困难的。


sha1算法

一、简介

1.sha1算法全称:安全散列算法 或 安全哈希算法(Secure Hash Algorithm)

2.处理方式与MD5类似。



程序代码

//main.c

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

#include "./../3rd/crypto/base64_encoder.h"
#include "./../3rd/crypto/base64_decoder.h"

#include "./../3rd/crypto/md5.h"

#include "./../3rd/crypto/sha1.h"

int main(int argc, char** argv)
{
//初始值
char* orgin_buffer = "hello world!";

//base64 编码int base64_encode_len;
char* base64_encode_buffer = NULL;
base64_encode_buffer = base64_encode(orgin_buffer, strlen(orgin_buffer), &base64_encode_len);
printf("base64_encode_buffer : %s\n", base64_encode_buffer);

//base64 解码
int base64_decode_len;
char* base64_decode_buffer;
base64_decode_buffer = base64_decode(base64_encode_buffer, base64_encode_len, &base64_decode_len);
printf("base64_decode_buffer : %s\n", base64_decode_buffer);

//base64 释放资源
free(base64_encode_buffer);
free(base64_decode_buffer);

//md5 加密 //固定长度的二进制数据
unsigned char md5_encode_buffer[MD5_HASHSIZE];
md5(orgin_buffer, strlen(orgin_buffer), md5_encode_buffer);
//转成16进制文本打印
printf("\n");
printf("md5_encode_buffer : ");
for (int i = 0; i < MD5_HASHSIZE; i++)
{
printf("%x", md5_encode_buffer[i]);
}
printf("\n");

//sha1
int sha1_encode_len;
unsigned char sha1_encode_buffer[128];
crypt_sha1(orgin_buffer,strlen(orgin_buffer), sha1_encode_buffer, &sha1_encode_len);
//转成16进制文本打印;
printf("\n");
printf("sha1_encode_buffer : ");
for (int i = 0; i < sha1_encode_len; i++)
{
printf("%02x", sha1_encode_buffer[i]);
}
printf("\n");

system("pause");
return 0;
}