格式保持加密——FF1算法

记大三一次计算机安全学作业

使用AES算法实现以下格式保持加密。

0、字符表:大写英文、小写英文字母、0-9、“-”和“*”

1、功能:加密如下格式文本 abcd-efgh*23,输出保持此格式的密文(比如输出 edfa-daxm*89),并可以解密。

2、可直接使用官方提供的AES代码。

3、输入输出可以是文本文件,也可以命令行输入、屏幕输出。

4、秘钥可以固定写在程序中,也可以是文本文件保存的秘钥。

5、C/C++语言实现。

6、需要提交实验报告,说明文本编码、解码的过程。

作业分析

  • 字符表包括大小写英文字母,数字和两个特殊符号(‘*’和’-‘)
  • 作业要求加密之后英文字母对应英文字母(或者更细致地,大写对大写,小写对小写),数字对数字,且特殊符号不变
  • 在实现格式保持加密之前,要明白FF1(此处链接不是随便搞的,真的很清晰地介绍了FF1和FF3)是在一个字符集中加密,如果把字符表的内容编码成为一个字符集,那就做不到第二点的对应关系了。也就是说,单纯地运用FF1算法,可能会加密出英文字母对应数字或特殊符号(‘*’,’-‘)。
  • 为解决上述问题(冥思苦想)只能把字符集拆开,将输入的明文用上述特殊符号分割成为多组明文块,然后用不同的字符集分别进行加密。其中,我对于字符集的划分:英文字母、数字。
  • 最后一点就是用的AES加密算法了,我用的是openssl库实现的AES。

BUG

  • 代码的BUG:因为从0(对应于两个字符集中的’A’和0)开始编码,而ASCII码表的0对用于\0,所以会将输入加密的字符串截断导致不能正确加密。所以输入的明文中不能包含A和0。
  • BUG的解决方法:不用ASCII码字符集,自己定义字符集

具体编码

       A,B,C,,Y,Z,   a,  b,  c ,,  y, z>0,1,2,,24,25,26,27,28,,50,51
       0,1,2,,9>0,1,2,,9

代码

给两个相当给力的链接
参考
FF1样例

猜你喜欢

转载自blog.csdn.net/snowlyw/article/details/78989116
ff1
ff