1. 关于base64编码
Base64编码将3个8位的字符串转换为4个6位的字符串。转换后的编码用64个字符对应。
在网上有很多关于base64加密解密的说法,我感觉很多不是真正的加密,因为如果不是自己设置密匙,总会觉得怪怪的,会认为是采用统一的密匙加密(这样就很容易破解了)。
这边说明我是如何实现base64加密的。看这篇文章之前,必须先看关于base64编码的知识,如http://zh.wikipedia.org/wiki/Base64。
2. base64编码规则的加密算法
base64编码最终用64个字符去对应,假若64个字符可以自己选择,顺序可以变化。就可以形成base64编码规则的加密算法。
这种加密算法的过程很简单。
首先:定义一串65字节的编码字符串(最后一字节作为填充字节),要求字符无重复;
然后:经过base64编码;
最后:生成密文。
解码时需要用编码字符串生成密钥。过程如下:
首先:通过编码字符串生成密钥;
然后:用此密钥进行逆64编码;
最后:生成明文。
从这加密解密过程可以知道,密匙和密钥是不一样的。但这边的加密过程没有经过太多的数学转换,通过密钥生成密匙和通过密匙生成密钥都很简单。所以密匙和密钥都需要保密。
Base64加密其本质还是字符替换的过程。只是经过base64编码改变了原来字符出现的概率。只能用6位字符的概率去破解。
头文件见下面,我的测试程序如下:
int _tmain(int argc, _TCHAR* argv[])
{
//自定义的密匙,这边没有将其打乱。
char* base64Code = "ADCBEFGHIJKLMNOPWRSTUVQXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
char deBase64Code[129];
chartestBase64[128]="欢迎使用base64加密算法\n\n作者:吴建凰\nEmail:wjh_2010@163.com\n如有问题请用邮件与我联系。\n\t\t\t谢谢";
chartestDeBase64[128];
int len;
memset(deBase64Code,0,129);
memset(testDeBase64,0,128);
printf("明文 = \n%s \n ",testBase64);
//用标准的base64编码
printf("用标准的base64编码\n");
len = StringToStdBase64(testBase64,0,testDeBase64);
len = StdBase64ToString(testDeBase64,len,testBase64);
printf("密文 = \n%s \n len = %d \n",testDeBase64,len);
//用自定义的base64编码
printf("用自定义的base64编码\n");
GetDeBase64Code(base64Code,deBase64Code);
len = StringToBase64(testBase64,0,testDeBase64,base64Code);
len = Base64ToString(testDeBase64,len,testBase64,deBase64Code);
printf("密文 = \n%s \n len = %d \n",testDeBase64,len);
return 0;
}
若觉此文章对您有用,需要我帮助请发送邮件到wjh_2010@163.com。谢谢。
附:头文件的说明
/**
*将字符串转换成自定义的base64编码
*@srcStr原字符串
*@length原字符串长度
*@destStr保存转码后的缓冲区,由于base64转码字符串会增大1/3,所有其缓冲区长度必须为原来的4/3。
*@base64Str自定义的base64字符串
*@return成功 返回 destStr字符串的长度
*失败 返回 -1
*/
DllFun int StringToBase64(char* srcStr,int length,char* destStr, char* base64Str);
/**
*将字符串转换成标准的base64编码
*@srcStr原字符串
*@length原字符串长度
*@destStr保存转码后的缓冲区,由于base64转码字符串会增大1/3,所有其缓冲区长度必须为原来的4/3。
*@return成功 返回 destStr字符串的长度
*失败 返回 -1
*/
DllFun int StringToStdBase64(char* srcStr,int length,char* destStr);
/**
*将base64字符串转换成常规字符串
*@srcStrbase64字符串
*@lengthbase64符串长度,由base64字符串的特点,其长度必须是4的倍数。
*@destStr保存转码后的缓冲区,由于base64解码后其长度会缩短1/4,所有其缓冲区长度必须大于length的3/4。
*@deBase64Str与自定义的base64字符串相匹配的解码字符串
*@return成功 返回 destStr字符串的长度
*失败 返回 -1
*/
DllFun int Base64ToString(char* srcStr,int length,char* destStr,char* deBase64Str);
/**
*将转换成标准base64编码的字符串 转换成常规字符串
*@srcStrbase64字符串
*@lengthbase64符串长度,由base64字符串的特点,其长度必须是4的倍数。
*@destStr保存转码后的缓冲区,由于base64解码后其长度会缩短1/4,所有其缓冲区长度必须大于length的3/4。
*@return成功 返回 destStr字符串的长度
*失败 返回 -1
*/
DllFun int StdBase64ToString(char* srcStr,int length,char* destStr);
/**
*获取标准的base64字符串
*@return返回base64字符串,返回的是常量,不能对其修改,否则后果难想象。
*/
DllFun char* GetStdBase64Str();
/**
*获取标准的base64解码字符串
*@return返回base64解码字符串,返回的是常量,不能对其修改,否则后果难想象。
*/
DllFun char* GetStdDeBase64Str();
/**
*根据自定义base64字符串生成逆base64字符串
*@base64Strbase64转码字符串,长度为65个字符,最后一个代表填充字符
*@deBase64Code逆base64字符串,缓冲区长度为128
*@return
*/
DllFun int GetDeBase64Code(char* base64Str,char*deBase64Code);
分享到:
相关推荐
Base64编码的核心原理是将二进制数据进行分组,每24Bit(3字节)为一个大组,再把一个大组的数据分成4个6Bit的小分组。由于6Bit数据只能表示64个不同的字符(2^6=64),所以这也是Base64的名字由来。
Base64加密算法的C语言实现, 比较精简
c++实现base64算法加密解密,不需要修改,直接运行即可
java关于加密的算法demo代码(Base64加密\数字签名\对称加密算法\非对称加密算法\消息摘要算法) JAVA安全实现三种方式: 1.JDK 2.Commons Codec 3.Bouncy Castle 一。非对称加密算法: 1.DH 2.RSA 3.ELGamal 二。...
主要介绍了Java实现的Base64加密算法,结合实例形式分析了Java实现的base64编码转换相关使用方法及操作注意事项,需要的朋友可以参考下
java base64 算法 java实现base64加密 解密
base64的js实现 javascript实现base64加密算法
用Java实现base64的加密解密
C++实现了SHA1加密算法,MD5加密算法和base64加解密算法类。 程序中做了测试, 绝对可用。
参照网上Base64 js加密解密写的java实现,网上没看到出现过,可能大神都不屑写这种小东东,只好自己写了。弄了好几天,总算弄好了。...熟悉二进制的可自己更改算法,当然加密算法更改了解密算法同样得更改
Base64是网络上最常见的用于传输8Bit字节码的编码方式之一,Base64就是一种基于64个可打印字符来表示二...本资源使用C语言实现Base64加密和解密,可以实现数据的加密和文件的加密,不借助任何的第三方工具,便于移植。
用C语言实现的一个Base64加解密的算法。 项目上用到,就写了一个。拿出来同时给大家分享。
前面学习总结了平时开发中遇见的各种数据加密方式,最终都会对加密后的二进制数据进行Base64编码,起到一种二次加密的效果,其实呢Base64从严格意义上来说的话不是一种加密算法,而是一种编码算法,为何要使用Base64...
java实现SHA1、SHA、MD5、AES加密、AES解密、BASE64解密、BASE64加密,以及apache BASE64 jar和源码
用c语言实现的base64,包括加密算法和解密算法。
Base64的加密源码,有直接使用.NET中的的库类函数和自己完成算法实现2中方法
本工程是基于RC4和Base64的加解密算法实现,可用于项目开发,包含完整的工程文件。包含RC4和Base64算法文件,有具体的demo实现。
基于java BASE64Decoder 算法实现数据库账号的加密解密的源码
RSA加密算法在VBRSA加密算法在VBRSA加密算法在VB
android 开发中有时会需要用到base64加解密,其实base64并不算是一种加密的算法,只是一种基于64个可打印字符来表示二进制数据的表示方法。 google在android.util下提供了一个Base64工具类,可以很方便的用它encode...