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 // 创建一个对象,然后给这个对象新的属性和 ...
随机推荐
- Linux下几个常用的快捷键,真的很实用
1. [tab] 键 在linux所有的shell中,[tab]是最常用的也是linux的bash shell中最棒的功能:它具有命令补全和档案补全的功能.如果不使用[tab]键,那就别说自己懂li ...
- 关于PHP的curl开启问题 (转)
今天在做一个新浪登录功能,新浪提供的PHP SDK里需要用到curl_init()函数,在调试的时候报找不到curl_init()的方法. 经搜索得知需要开启curl的php扩展,那curl又是什么呢 ...
- TCP总结
TCP协议 <计算机网络>谢希仁 及笔记 TCP 的那些事儿(上):http://coolshell.cn/articles/11564.html TCP 的那些事儿(下):htt ...
- i利用图片按钮 和 input type="image" 为背景提交表单
<img src="img/cancel.jpg" onclick="javascript:document.getElementByIdx_x('loginFor ...
- 【网络流#2】hdu 1533 - 最小费用最大流模板题
最小费用最大流,即MCMF(Minimum Cost Maximum Flow)问题 嗯~第一次写费用流题... 这道就是费用流的模板题,找不到更裸的题了 建图:每个m(Man)作为源点,每个H(Ho ...
- hdu 1880 字符串hash
/*普通的hsah 由于元素太多 空间很小..hash碰撞很厉害.30分*/ #include<iostream> #include<cstdio> #include<c ...
- JavaScript代码性能优化总结
JavaScript 代码性能优化总结 尽量使用源生方法 javaScript是解释性语言,相比编译性语言执行速度要慢.浏览器已经实现的方法,就不要再去实现一遍了.另外,浏览器已经实现的方法在算法方面 ...
- call和apply区别
call和apply 基本上是一个意思 区别在于call的第二个参数可以是任意的类型,而apply的第二个参数必须是数组,也可以是arguments.call方法:语法:call(thisObj,Ob ...
- MYSQL Model报错:指定的存储区提供程序在配置中找不到 的解决
开了项目发现没装mysql及mysql connector/.net.下了个最新版本,结果打开vs,进入模型edmx页面就出了这个问题. 刚开始以为是ProviderManifestToken版本的问 ...
- 用Spring Boot零配置快速创建web项目(1)
一.Spring Boot简介 Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程.该框架使用了特定的方式来进行配置,从而使开发人 ...