AES的S-BOX构造优化
之前写过SBOX的构造,后来看到别人的优秀思路,借鉴过来重新改了一点。
原文地址:http://www.cnblogs.com/7hat/p/3383546.html
主要是将矩阵运算改为列运算之和,提高了效率。
#include<iostream>
#include<fstream>
#include <iomanip>
using namespace std;
unsigned char exp[], log[], inv[];
unsigned char GFmul(unsigned char a, unsigned char b){
//GF(2^8) 乘法
unsigned char result = ;
if((b&) == )result = a;
b >>= ;
for(int i = ; i < ; i ++){
if(a > ){
a = (a << ) ^ 0x1b;
}
else{
a <<= ;
}
if((b&) == ){
result ^= a;
}
b >>= ;
}
return result;
}
void generateMulTab(){
//选择生成元3作为构造乘法表的基础
const int N = ;
exp[] = N;
log[N] = ;
unsigned char tmp = N;
for(int i = ; i < ; i ++){
tmp = GFmul(tmp, N);
exp[i] = tmp;
log[tmp] = i;
}
}
void generateMulInverse(){
//利用exp来构造乘法逆元
inv[] = ;
inv[] = ;
//若3^m * 3^n = 1 = 3^255,则 m + n = 255
for(int i = ; i < ; i ++){
inv[exp[i]] = exp[-i];
}
}
unsigned char SBoxValue(unsigned char x){
//返回SBOX对应的值
unsigned char y = inv[x];
unsigned char result = ;
unsigned char c = 0x1f; //常数矩阵的第一列
while(y){
//将矩阵运算转化为列运算之和,因为y只是一个"一维"的矩阵
if(y&){
//yi 表示是否要加上对应ci的列
result ^= c;
}
y >>= ;
//循环左移为下一列元素
c = (c<<) | (c>>);
}
result ^= 0x63;
return result;
}
int main(){
//单元测试,输出SBOX的全部值
generateMulTab();
generateMulInverse();
unsigned char SBox[][];
for(int i = ; i < ; i ++){
for(int j = ; j < ; j ++){
unsigned char tmp = i* + j;
SBox[i][j] = SBoxValue(tmp);
}
}
ofstream write("Test.txt");
for(int i = ; i < ; i ++){
for(int j = ; j < ; j ++){
write<<setiosflags(ios::left)<<setw()<<hex<<(int)SBox[i][j];
}
write<<endl;
}
write.close();
return ;
}
C++
AES的S-BOX构造优化的更多相关文章
- REORG TABLE命令优化数据库性能
[转]DB2日常维护——REORG TABLE命令优化数据库性能 一个完整的日常维护规范可以帮助 DBA 理顺每天需要的操作,以便更好的监控和维护数据库,保证数据库的正常.安全.高效运行,防止 ...
- DB2日常维护——REORG TABLE命令优化数据库性能
一个完整的日常维护规范可以帮助 DBA 理顺每天需要的操作,以便更好的监控和维护数据库,保证数据库的正常.安全.高效运行,防止一些错误重复发生. 由于DB2使用CBO作为数据库的优化器,数据库对象的状 ...
- DB2日常维护——REORG TABLE命令优化数据库性能(转)
[转]DB2日常维护——REORG TABLE命令优化数据库性能 一个完整的日常维护规范可以帮助 DBA 理顺每天需要的操作,以便更好的监控和维护数据库,保证数据库的正常.安全.高效运行,防止一些错误 ...
- pytorch构建优化器
这是莫凡python学习笔记. 1.构造数据,可以可视化看看数据样子 import torch import torch.utils.data as Data import torch.nn.func ...
- 从结构和数字看OO——面向对象设计与构造第一章总结
不知不觉中,我已经接触OO五周了,顺利地完成了第一章节的学习,回顾三次编程作业,惊喜于自身在设计思路和编程习惯已有了一定的改变,下面我将从度量分析.自身Bug.互测和设计模式四个方向对自己第一章的学习 ...
- 【转载】史上最全:TensorFlow 好玩的技术、应用和你不知道的黑科技
[导读]TensorFlow 在 2015 年年底一出现就受到了极大的关注,经过一年多的发展,已经成为了在机器学习.深度学习项目中最受欢迎的框架之一.自发布以来,TensorFlow 不断在完善并增加 ...
- javascript面向对象系列第四篇——选项卡的实现
前面的话 面向对象的应用并非只是读几本书那么容易,需要有大量的工程实践做基础才能真正理解并学会使用它.本文将用面向对象的技术来制作一个简单的选项卡 图示说明 由图示结果看到,这是一个非常简单的选项卡. ...
- JavaScript面向对象与原型
工厂模式:无法识别对象 function createObject(name, age) { //集中实例化的函数 var obj = new Object(); obj.name = name; o ...
- JavaScript 面向对象与原型
ECMAScript有两种开发模式:1.函数式(过程化);2.面向对象(OOP); 一 创建对象1.普通的创建对象 ? 1 2 3 4 5 6 7 8 9 // 创建一个对象,然后给这个对象新的属性和 ...
随机推荐
- Meth | ubuntu下安装与卸载软件方法
1.通过deb包安装的情况: 安装.deb包: 代码:sudo dpkg -i package_file.deb反安装.deb包:代码:sudo dpkg -r package_name 2.通过ap ...
- 使用Intent实现Activity的显式跳转
[正文] 这里以按钮实现活动跳转为例,为实现这个功能,我们需要三个步骤: 1.点击按钮才发生页面跳转,因此,第一步我们先要找到要点击的按钮 如何拿到按钮对象呢?通过资源id,前面我们提到过,在R.id ...
- 获取web路径的几种方式
1.string str1 = Request.ApplicationPath.ToString(); 返回路径为:\HolterClientWeb 2.HttpServerUti ...
- java中的异常机制(编译时异常)
/ * 1 异常机制的原理 * 异常是什么:就是错误的另外一种说法; * 在java中,有一个专门模拟所有异常的类,所有的异常都必须继承这个类:Throwable; * 本质是:当程序出错以后,jvm ...
- CSS 解决<td>里面内容太多把表格弄变形的原因,设置 自动换行。
1 < style="word-break:break-all"> 例如div宽200px,它的内容就会到200px自动换行,如果该行末端有个英文单词很长(congra ...
- 微信企业号开发遇到的bug
a. 微信嵌入视频: a.1 视频元素播放时层级默认被顶置 a.1 视频播放后窗口无法通过css改变层级 a.2 视频播放后窗口无法通过css隐藏 解决方案:做个虚假的播放窗口,点击播放窗口(虚假的) ...
- JavaScript 本地对象、内置对象、宿主对象
首先解释下宿主环境:一般宿主环境由外壳程序创建与维护,只要能提供js引擎执行的环境都可称之为外壳程序.如:web浏览器,一些桌面应用系统等.即由web浏览器或是这些桌面应用系统早就的环境即宿主环境. ...
- java学习笔记(11) —— Struts2与Spring的整合
1.右键 项目名称 —— MyEclipse —— Add Spring Capabilities 2.选取 Copy checked Library contents to project fold ...
- javascript之闭包深入理解(一)
曾经在开始学习javascript的时候,很是不理解闭包的概念.今天想对它详细的剖析. 在说清楚闭包之前,必须先清楚作用域链. 作用域链 我们知道,执行环境是js中最为重要的一个概念.执行环境定义了变 ...
- CMD 下 进入 ORACLE
.sqlplus /nolog .connect sys/orcl@ORCL as sysdba .select sysdate from dual exit;