在AES加密算法中,如何生成全是大写字母的明文和全是字母的密文

 本人最近在做一个利用AES加密算法的激活系统,在写好AES算法后,发现算法本身是把16个字节明文数据转换成另一个值不同的16字节密文数组,但存在一个小小的问题,如果想要由全是数字或者字母的明文生成也全是数字或者字母的密文,就有些问题了,即时你的明文全是字母,在加密后也会变成一堆;乱码,充斥着各种符号,不易输入输出,本文提供了一个小小的办法;

         我是在Cortex m3处理器上做开发,所以明文获得方式如下:

注:以下程序部分只显示接口函数;

1:首先利用RTC获取系统时间:

en_result_t get_system_time(uint8_t*year,uint8_t *month,uint8_t *day,uint8_t *hour,uint8_t *minute,uint8_t*second);

2.以系统时间作为随机函数的种子,利用随机函数生成一串16个字节的字符串,这个时候生成字符串含有大量的符号、数字和字母组成,

不易输出和显示。

void generate_random_code(uint8_t*random_code);

3.我采用对这16个字节的字符串中的每个字符取出来,对其ASICC码值进行对26取余操作,为什么对26进行取余?因为我要把这16个字节的字符串全都变成由大写字母组成,大写字母的ASICC值范围是[65,90];我们只需要把每个字符串进行26取余再加65,就可以全都变成由大写字母组成的随机序列拉,其他数字和小写字母同理。实现函数如下:

/*将plen个字节转成大写字母*/

void byte_convert_capital(uint8_t*string,uint8_t plen)

{

         uint8_tloop;

         for(loop= 0;loop < plen;loop++)

         {       

                   *string= (*string)%26 + 65;

                   string++; 

         }

}

/*首先利用随机数产生函数产生16个字节的*/

void generate_valid_code(uint8_t*valid_code)

{

         generate_random_code(valid_code);

         byte_convert_capital(valid_code,16);

}

4.然后调用AES加密接口函数,对由16个大写字母构成的字符串进行加密操作,AES加密函数接口如下:

         /**

 * 参数 p: 明文的字符串数组。

 * 参数 plen: 明文的长度,长度必须为16的倍数。

 * 参数 key: 密钥的字符串数组。

 */

void aes(char * p, uint32_t plen, char *key);

这时候得到的密文会含有许多符号,如:%!(】)【】等等这类字符,这不是我们想要的,这个时候我们可以再次调用第3步中的函数byte_convert_capital();把得到的字符串全转换成大写字母构成,如此便可以实现由大写字母字符串加密得到也是大写字母构成的字符串拉>>0.0<<

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值