base64 md5 sha1编码与解码
一、如何用c语言对数据编码与解码,这篇主要是使用一个第三方crypto库,已上传至csdn,下载链接在下方。
二、crypto库代码文件下载地址(crypto.rar内部只有关于base64、md5、sha1的8个文件)
1. http://download.youkuaiyun.com/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; }