base64 加密算法的实现

36 篇文章 0 订阅
30 篇文章 0 订阅
 

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];

 char testBase64[128]="欢迎使用base64加密算法\n\n作者:吴建凰\nEmail:wjh_2010@163.com\n如有问题请用邮件与我联系。\n\t\t\t谢谢";
 char testDeBase64[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字符串转换成常规字符串
 *@srcStr  base64字符串
 *@length  base64符串长度,由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编码的字符串 转换成常规字符串
 *@srcStr  base64字符串
 *@length  base64符串长度,由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字符串
 *@base64Str base64转码字符串,长度为65个字符,最后一个代表填充字符
 *@deBase64Code 逆base64字符串,缓冲区长度为128
 *@return 
 */
DllFun int GetDeBase64Code(char* base64Str,char*deBase64Code);

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值