91av视频/亚洲h视频/操亚洲美女/外国一级黄色毛片 - 国产三级三级三级三级

資源簡介

華科密碼學課設之SPN的查分攻擊以及暴力破解算法。差分攻擊算法只能攻擊出2個子密鑰,其余的6個子密鑰已經通過窮舉法攻擊破解得到。

資源截圖

代碼片段和文件信息

package?com.cyc.www.cry;

import?java.io.File;
import?java.io.FileNotFoundException;
import?java.io.FileReader;
import?java.util.Scanner;
/**
?*?@author?Hust?陳艷超
?*/
public?class?SPN_ATTACK_DIFF?{
private?int??maxKeyL1?=?0;
private?int?maxKeyL2?=?0;
private?static?short[]?sBox?=?{1441312151183106125907};
private?static?short[]?sBoxOpp?=?{1434811210157139611205};?//s盒的逆
private?static?short[]??pBox?=?{15913261014371115481216};
private?String?path?=?“D:\\cipherAndPlain.dat“;
private?short[]?cipherNum;
private?static?short[]?plainNum;
private?int?Num?=?8000;
private?int[][] count;
private?static?short?Ktemp?=?(short)0x3A94;

public?static?void?main(String[]?args)?{
SPN_ATTACK_DIFF?test?=?new?SPN_ATTACK_DIFF();
}

public??SPN_ATTACK_DIFF()?{
initAll();
attackDiff();
exhaustKeyDiff();
}
/*
?*?初始化8000組明密文對,256候選密鑰,計數器
?*/
public??void?initAll()
{
File?file?=?new?File(path);
plainNum?=?new?short[Num];
cipherNum?=?new?short[Num];
count?=?new?int?[16][16];
try?{
Scanner?in?=?new?Scanner(new?FileReader(file));
for?(int?i?=?0;?i? String?line?=?in.nextLine();
String[]?tokens?=?line.split(“\\|“);
plainNum[i]?=?(short)?(Integer.parseInt(tokens[1]));
cipherNum[i]?=?(short)?(Integer.parseInt(tokens[3]));

}
}catch?(FileNotFoundException?e)?{
e.printStackTrace();
}

for?(int?i?=?0;?i? for?(int?j?=?0;?j? count[i][j]?=?0;
}
}
}

/*1
?*?進行差分攻擊?
?*?運行之后發現8000對明密文對中只有70對是經過篩選的可以用的明密文對
?*/
public?void?attackDiff()?{
short?v2?=?0v4?=?0u2?=?0?u4?=?0;
short?v2x?=?0?v4x?=?0?u2x=?0?u4x?=?0;?
short?u2p?=?0?u4p?=?0;
short?y1?=?0y1x?=?0y3?=?0?y3x?=?0;
short?l1?=?0?l2?=?0;
short?y2?=?0?y4?=?0y2x?=?0?y4x?=?0;
short?test?=?0;
short??p?=?0p2?=?0;
for?(int?i?=?0;?i? for?(int?j?=?i?+?1;?j? p?=?(short)((plainNum[i]?<>>16);
p2?=?(short)((plainNum[j]<<16)>>>16);
if?(((p?^?p2)?==?0x0b00)?&&?(test? y1?=?(short)(((cipherNum[i]?&?0xf000)<<16)>>>28);
y3?=?(short)((cipherNum[i]?&?0x00f0)>>>4);
y1x?=?(short)(((cipherNum[j]?&?0xf000)<<16)>>>28);
y3x?=?(short)((cipherNum[j]?&?0x00f0)>>>4);
if?(y1?==?y1x?&&?y3?==?y3x)?{
test++;
System.out.println(test?+?“\t“?+?i?+“\t“?+?j?);
y2?=?(short)((cipherNum[i]?&?0x0f00)>>>8);
y4?=?(short)(cipherNum[i]&?0x000f);
y2x?=?(short)((cipherNum[j]?&?0x0f00)>>>8);
y4x?=?(short)(cipherNum[j]?&?0x000f);
for?(int?k?=?0;?k? for?(int?k2?=?0;?k2? v2?=?(short)(k?^?y2);
v4?=?(short)(k2?^?y4);
u2?=(short)?sBoxOpp[v2];
u4?=?(short)sBoxOpp[v4];

v2x?=?(short)(k?^?y2x);
v4x?=?(short)(k2?^?y4x);
u2x?=?(short)sBoxOpp[v2x];

評論

共有 條評論