整体思路是把待处理的大量数据划分为尺寸相同的多个小数据块,然后在GPU上使用的AES算法对各个小数据块进行并行的运算,运算完成后把每个小数据块的值按顺序保存在一起,这样就可以使用大量的线程来并行地对每个小数据块进行运算[12]。
AES算法并行实现的详细步骤为:
1、首先在主机端把所有文件顺序读入一个动态分配的数组中,方便向设备端传送数据。详见4.5.2节。
2、从键盘读入一个128位密钥,将其扩展为AES 10轮加密所需的11个四字节字的扩展密钥。详见4.5.3节。
3、调用内核函数,将数据传入设备端进行计算。调用形式如下[13]:
testKernel<<< dim3 grid, dim3 threads >>>(char* d_odata , char* d_AES , char* d_AES_ES , size_t width)
参数:
grid-栅格数
threads-线程数
d_odata-输出结果缓冲区指针
d_AES-存放密文的数组指针
d_AES_ES-存放扩展密钥的数组指针
width-线程块宽度 (size_t width = blockx * threadx)
4、内核加密完成后,由主机端从存放结果的缓冲区读出结果,并写入文件中。
4.4 程序流程图
4.4.1 加密部分
图 4.3 加密部分程序流程图
4.4.2 解密部分 高并行度的信息加解密算法研究(7):http://www.youerw.com/jisuanji/lunwen_7514.html