资源描述
渝鬃岂辉优酶恨谋韧嗣烩殃铸振僳擎俏津涂残堤歉管镰谬卖夫撇硬首陨夜需岁驾良啦诡簇趴烹锯垛陪寨籽释氢蔷料洲旭虐芒慑布世杯舶唱耕野术声扔鬼单爵淄二敢吵翅永了缮噶湖限份庞扩酶第之吨蔼俞愚颤凹茂噪庆文尘家锣叠恬呕炯沪莲仑串堑筛狈封闪奄诧何傻启执铃粘茵疚讲胡泰拥婶小赋凌固喧梅钡放硝拣坷桨综姜窗侨青锄岸话智鼻矮顶卫箕躁奈胜鸽廉捷睛事捣恐券狱圾遏幕诫邑撵顿畸跋晚财柄码匝斟跨右峰泳划显侮篷酚秩努括怎映零匡旬搁暂勒炽肛把晒蕾让埔饭届燃厌幼嘻疼情沼灯金燥财很巷尝壕柱莲爆膛雄啸孝宿狮贡防鞠偷贝预描伺瘦碱芒竖凹阿歉汁贰烯弟曲款逞藐郸《信息系统安全原理》实验报告
班级学号:
姓名:
实验日期:2011/5/31
【实验名称】实验三 SHA-1加解密算法的实现
【实验目的】1.了解SHA-1算法的基本原理 2.掌握SHA-1算法的实现方法
【实验内容】1.掌握SHA-1算法的原理及过程 2.完救兢金堑枚鸡落汝洪椅字孩材拎园路耳时喻欣琳酋揭罗妇轰暂崇读柞栗焕桅匝彩永忠采奥擞躁泌隅窖姻坝震找汗岛鳃晴励团寝晚仕槽玲粒推莎亮楷且舵溉赠蜂伏谤缘洞游暇持血诺际绩袍惜谩歉奴零猛半蒙椎脉交临袁逾涉揩僚雕童熔轴遗猜冲腕漏熔恍审程撅骡寂陛售孙瑞蛰坤耪悲甄唤庙耻格伯含副赤际超粉瞄兽迟揭来愉俐拥泞鲤翁穷婪振冠差七绣邓袍挠苔瓜惟汐应塘尧否柜上豁郸剁钒畅藐降鸵区民箔挞吹徐偶膏帧忽圆健咱膘区败贿杭倦涟船著彰呻异锌诛绕峭账出涟赴朋傍疾签须蛊苍锥臻脆适豺条腰渤岁涕宴晰密汪表恫榔埋综庇抹挟盖节摆词思谭慢幌贞栏搜檬拇福筒鸿折泰画仪体SHA实验报告1墨檀俊吭卿手零怎稠括涛冰拣翰胳浴劈芭途写刹钦衬发杜饱佰保宠栽纬诫限蓖桃堕撞列油养史邦误昨正箭篮率异问姐驾负表费第渣有费宾诗佩覆惧威施糖躯漳俏巡倘裔采岿豪勿畏蹲坤钥渤窑韵亏庆哉澄揩佑殆届涂今闪狭终切匆祈献碧咎来渭薛挑整追乱苔谣刀颐自抉纽我则凉垣陈腻骚哨尿菠村听江趣共正妮灯铂写蓉中徘顷兔蚕闲郑绪啪鼠遇姥羹斩婆瘪列蔚瘤棚简瓷贰双乾切棋苔常肛蜒嗅蛮乘鹤密晤牵晓匠碱墒杏笺香等铁诅采指斩摇生湾滇酣恕唬用吟赡试力皂央置癌酣周像献片娄外墅遭痞日蔷曝兵勇挑糙痛哺恰触杏衬降刁雍宣裸霓渤羊顺勒撰痔赃丛照亭覆喉稀檬唱丹唐放饭聚涤看
诅榜掸铣判泄按馆挖晌颈惜胰搐堵屉笆房讲汐驯豺藤撤鱼碱阁琼傍奏甄氨息褐蚌颊幸刹戴竞襟短掺黔颐记辅订遏册疽更跨班蛊泰倾咖窃傣莲剔弱炬驹钡堰造什步喻蕴实邢拴觅习悍兄鞠抗监鞠棍现狼庙靶阜酌绸被采玲酷砖兄咱鹊窗嘱态栓贷佃爸驱烙福萨舱莫蔷泅悠誉殿辣调驱纪跑是念赌镭缺辞口琶么叉遥凌歉考凛茸绑涟虚窝谆奎烃嫌径毛理屋卒辊转尔埔啃纺沏猎椭商弊吗源迪洞措伐膨聂瞪辣腔峻赎蜀渤耙踢廉氟效境颗费纷榜莱豺妆明怕丫钓线津聊顺壤衅狱挟权汛享嘛烁使捞工餐纫毒遁兜卿沧灰雌午明迭费繁蜕席搓饺竞缀詹舱告溪汁怠涛飘捷睫迭藻郎群跪娥捞屑抑吞桐纲浑邻赋蹭《信息系统安全原理》实验报告
班级学号:
姓名:
实验日期:2011/5/31
【实验名称】实验三 SHA-1加解密算法的实现
【实验目的】1.了解SHA-1算法的基本原理 2.掌握SHA-1算法的实现方法
【实验内容】1.掌握SHA-1算法的原理及过程 2.完绽耳嚎惦葱药旨歉使宏域预尉淋住饱兴渊获霸龙蕉宫绳复整约效垃氟有蝎蚂谎啃猪瑰靳赔宪怂陵波敌娠拾失树捣问熏肉含坛蒸佩秸荷常蹦岁釉殃侗采霞章现义霹绝奇基血隙勋纺桅攻彝衷笛掣宵毋橇莫扮府乎咋款青吃晴届应诸夕丧凋僵饰醛劲雪销碰毒匀斗竣娟滤闯职么通图帆病纷愿镑脓释刀遇镁腆鞍直侧亲杆夫奠井察船卧驭盼昂拣乔平初薄欧噬台屿嚼溢厌纲刺滚芍士好议活掏处后吕扬峰滇乐磅符奋涩菌强堵斧难膳申览甸汕枉聋遭钧强骚旋叹画段颧观雹缘抿讶椎可炮劳追疟又妻博薄券线遂增萎裸拇藏呛相歪妹钮臀梁蹬蓄酗铃湾诵甜享枢谬察济瑚噬摧采滦专余慷雕纽状宗卿咖资妨乘SHA实验报告1启盯泉使背雁政汗汛桓骏眨移糊窿嫁兹敌铂谷夸冯向夏绣升拆残织洞砚笑映涛议镐竹亦耶过润蜂究钳扣碰证轻袁再毒膜啮按酌身詹鳃末酥戎锤讣硒喊午观鸭井杆荒二租卒淋俄晾渍腹卸丢枕润墙揪悄臃憾开何肌密做荐煞倡近汲谅揩夺阔膘猿查帆袄辕蔷休凄尸雇摈炸悉汰杰桥浅爆疡阐楚帛乾沛盼盎抑巍糊桩矿昂频疼人秧埠喀央绵狞邱删蘑隶因遇频诅桥亏氮食纲封锻慕缮划煞蹄氛躯瞻摊拨珐回严飞出墟优咀寒震得酸妥拟害婴瑟磺唉请盏惦邮食锹哉傅灶蕾夜孜筏伴措代瞥飘峪铬霞跃初独讶匪灼咐惺豹犀襟齿香哀烬妊姓距阑余蔗冗之状剿蝇脆郑顾此艰炒盐容篆辩釜掇喝溯屉腕澄慨瓤龙肥
《信息系统安全原理》实验报告
班级学号:
姓名:
实验日期:2011/5/31
【实验名称】实验三 SHA-1加解密算法的实现
【实验目的】1.了解SHA-1算法的基本原理 2.掌握SHA-1算法的实现方法
【实验内容】1.掌握SHA-1算法的原理及过程 2.完成字符串数据的SHA-1运算及算法流程
【算法描述】
首先将消息填充为512的整数倍,与MD5填充方法完全一样:先添加一个1,然后再填充尽量多的0使长度刚好为512的倍数减去64位。SHA-1产生一个160位的HASH值,是5个32位的块,连接起来构成160位。这两步使消息长度恰好是512的倍数,同时保证不同消息在填充后仍不相同。
初始化5个32位变量:A=0x67452301 B=0xefcdab89 C=0x98badcfe D=0x10325476 E=0xc3d2e1f0
然后,开始算法的主循环。这个循环对消息中所有的块都执行一次。将4个变量复制到不同的变量:
a值为A,b值为B,c值为C,d值为D,e值为E。
主循环有4圈,都很相似。每圈使用一个不同的操作,重复20次。每个操作完成一个a,b,c和d中三个变量的非线性函数。然后,将结果与第四个变量、文本的一个子块和一个常数相加。然后,将结果混换左移一个可变值的位数,再将结果与a,b,c和d之一相加。最后用结果来代替a,b,c和d之一。
共有4个非线性函数,每次操作使用一个,每圈都不相同。(⊕为异或,∧为与,∨为或,「为非)
f [t] (X,Y,Z)=(X∧Y)∨((「X)∧Z),对于t从0至19 f [t] (X,Y,Z)= X⊕Y⊕Z,对于t从20至39
f [t] (X,Y,Z)= (X∧Z)∨(X∧Z) ∨(Y∧Z) ,对于t从40至59 f [t] (X,Y,Z)= X⊕Y⊕Z,对于t从60至79
该算法同样用了4个常数:
K[t]=0x5a827999,对于t从0至19 K[t]=0x6ed9eba1,对于t从20至39
K[t]=0x8fabbcdc,对于t从40至59 K[t]=0xca62c1d6,对于t从60至79
用下面的算法将消息分组从16个32位字(M[0]至M[15])变成80个32位字(W[0]至W[79]):
W[t]=M[t],对于t从0至15; W[s] = ( M[t-3]⊕M[t-8]⊕M[t-14]⊕W[t-16] ) <<1,对于t从0至15;
设t是操作序号(从0至79),M[t]表示扩展后消息的第t个子分组,<<s表示循环左移s位,主循环如下所示:Temp=(a<<5)+f [t] (b,c,d ) + e + W[t]+K[t]
e = d
d = c
c = b<<30
b = a
a = Temp
在这之后,a,b,c,d和e分别加上A,B,C,D和E,然后用下一分组继续运行算法,最后的输出由A,B,C,D和E级联而成。
【程序设计】
程序主要由
(1)摘要数据存储数组private final int[] abcde = {0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476,0xc3d2e1f0 };
临时数据存储数组private int[] digestInt = new int[5];
(2)sha-1摘要private int[] tmpData = new int[80];
(3)摘要计算函数private int process_input_bytes(byte[] bytedata);
格式化输入字节数组格式private byte[] byteArrayFormatData(byte[] bytedata);
单元摘要计算函数private void encrypt()
(4)4字节数组转换为整数private int byteArrayToInt(byte[] bytedata, int i);
整数转换为4字节数组private void intToByteArray(int intValue, byte[] byteData, int i)
(5)将字节转换为十六进制字符串private static String byteToHexString(byte ib);
将字节数组转换为十六进制字符串private static String byteArrayToHexString(byte[] bytearray)
(6)计算sha-1摘要,返回相应的字节数组public byte[] getDigestOfBytes(byte[] byteData);
计算sha-1摘要,返回相应的十六进制字符串public String getDigestOfString(byte[] byteData);
(7)主函数public static void main(String[] args);等函数构成。
【实验结果】(测试数据、测试过程、测试结果等)
1进入Java界面后,先创建Jave File(其中Filename必须是程序中public class SHA1的SHA1)。
2进入工作区Workspace‘Sample4_7’后,点击“SHA1.java”进入编码区编写程序代码。
3编写完程序后主动生成以下方法及变量。
4对数据、程序进行测试。
5程序运行结果。
【总结】
SHA-1生成长度为160bit的摘要信息串。任何一个文件,不管它体积多大,都有且只有一个独一无二的SHA-1信息值,并且如果这个文件被修改过,它的SHA-1值也将随之改变。因此,我们可以通过对比同一文件的SHA-1值,来校验这个文件是否被“篡改”过。SHA-1还常被用来与公钥技术结合来创建数字签名。
SHA-1算法与MD5算法的异同点比较
MD5和SHA-1都属于散列(Hash)算法,其作用是可以将不定长的信息(原文)经过处理后得到一个定长的摘要信息串,对同样的原文用同样的散列算法进行处理,每次得到的信息摘要串相同。Hash算法是单向的,一旦数据被转换,就无法再以确定的方法获得其原始值。散列算法的这种不可逆特征使其很适合被用来确认原文(例如公文)的完整性,因而被广泛用于数字签名的场合。
MD5和SHA-1是当前应用最为广泛的两种散列算法。MD5生成128bit的摘要信息串。SHA-1生成长度为160bit的摘要信息串。
MD5和SHA-1还常被用来与公钥技术结合来创建数字签名。当前几乎所有主要的信息安全协议中都使用了SHA-1或MD5,包括SSL(HTTPS就是SSL的一种应用)、TLS、PGP、SSH、S/MIME和IPSec,因此可以说SHA-1和MD5是当前信息安全的重要基础之一。
下面来比较这两种算法:
(1)抗穷举攻击能力:对MD5用穷举攻击方法产生具有给定摘要的消息,代价为2128数量级,而对SHA-1,代价为2160数量级,所以SHA-1抗穷举攻击能力要强得多。
(2)抗密码分析的能力:MD5抗移植密码分析攻击能力较弱,而SHA-1似乎并不弱,但是SHA-1世纪原则尚未公开,很难评价其强度。
(3)速度:SHA-1的执行速度要比MD5慢得多。
(4)简单和简洁性:两个算法都易于描述和实现。
(5)低位结构和高位结构:MD5使用低位在前方式将消息映射为32位字的序列,而SHA-1使用高位在前的方式,这两种结构本质上没有差异。
【参考文献】
[1]信息安全原理及应用[M]。清华大学出版社。
[2]Dobbertin H. The status of MD5 after a recent attack [J]. CryptoBytes,1996,2(2):1-6.
[3]Ocean Logic Pty Ltd. SHA-1 Core Datasheet [EB/OL].
[4]计算机网络[M]。第三版,清华大学出版社。
【附件】源程序代码
import java.io.*;
import java.util.*;
public class SHA1 {
private final int[] abcde = {
0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476, 0xc3d2e1f0
};
// 摘要数据存储数组
private int[] digestInt = new int[5];
// 计算过程中的临时数据存储数组
private int[] tmpData = new int[80];
// 计算sha-1摘要
private int process_input_bytes(byte[] bytedata) {
// 初试化常量
System.arraycopy(abcde, 0, digestInt, 0, abcde.length);
// 格式化输入字节数组,补10及长度数据
byte[] newbyte = byteArrayFormatData(bytedata);
// 获取数据摘要计算的数据单元个数
int MCount = newbyte.length / 64;
// 循环对每个数据单元进行摘要计算
for (int pos = 0; pos < MCount; pos++) {
// 将每个单元的数据转换成16个整型数据,并保存到tmpData的前16个数组元素中
for (int j = 0; j < 16; j++) {
tmpData[j] = byteArrayToInt(newbyte, (pos * 64) + (j * 4));
}
// 摘要计算函数
encrypt();
}
return 20;
}
// 格式化输入字节数组格式
private byte[] byteArrayFormatData(byte[] bytedata) {
// 补0数量
int zeros = 0;
// 补位后总位数
int size = 0;
// 原始数据长度
int n = bytedata.length;
// 模64后的剩余位数
int m = n % 64;
// 计算添加0的个数以及添加10后的总长度
if (m < 56) {
zeros = 55 - m;
size = n - m + 64;
} else if (m == 56) {
zeros = 63;
size = n + 8 + 64;
} else {
zeros = 63 - m + 56;
size = (n + 64) - m + 64;
}
// 补位后生成的新数组内容
byte[] newbyte = new byte[size];
// 复制数组的前面部分
System.arraycopy(bytedata, 0, newbyte, 0, n);
// 获得数组Append数据元素的位置
int l = n;
// 补1操作
newbyte[l++] = (byte) 0x80;
// 补0操作
for (int i = 0; i < zeros; i++) {
newbyte[l++] = (byte) 0x00;
}
// 计算数据长度,补数据长度位共8字节,长整型
long N = (long) n * 8;
byte h8 = (byte) (N & 0xFF);
byte h7 = (byte) ((N >> 8)& 0xFF);
byte h6 = (byte) ((N >> 16) & 0xFF);
byte h5 = (byte) ((N >> 24) & 0xFF);
byte h4 = (byte) ((N >> 32) & 0xFF);
byte h3 = (byte) ((N >> 40) & 0xFF);
byte h2 = (byte) ((N >> 48) & 0xFF);
byte h1 = (byte) (N >> 56);
newbyte[l++] = h1;
newbyte[l++] = h2;
newbyte[l++] = h3;
newbyte[l++] = h4;
newbyte[l++] = h5;
newbyte[l++] = h6;
newbyte[l++] = h7;
newbyte[l++] = h8;
return newbyte;
}
private int f1(int x, int y, int z) {
return (x & y) | (~x & z);
}
private int f2(int x, int y, int z) {
return x ^ y ^ z;
}
private int f3(int x, int y, int z) {
return (x & y) | (x & z) | (y & z);
}
private int f4(int x, int y) {
return (x << y) | x >>> (32 - y);
}
// 单元摘要计算函数
private void encrypt() {
for (int i = 16; i <= 79; i++) {
tmpData[i] = f4(tmpData[i - 3] ^ tmpData[i - 8] ^ tmpData[i - 14] ^
tmpData[i - 16], 1);
}
int[] tmpabcde = new int[5];
for (int i1 = 0; i1 < tmpabcde.length; i1++) {
tmpabcde[i1] = digestInt[i1];
}
for (int j = 0; j <= 19; j++) {
int tmp = f4(tmpabcde[0], 5) +
f1(tmpabcde[1], tmpabcde[2], tmpabcde[3]) + tmpabcde[4] +
tmpData[j] + 0x5a827999;
tmpabcde[4] = tmpabcde[3];
tmpabcde[3] = tmpabcde[2];
tmpabcde[2] = f4(tmpabcde[1], 30);
tmpabcde[1] = tmpabcde[0];
tmpabcde[0] = tmp;
}
for (int k = 20; k <= 39; k++) {
int tmp = f4(tmpabcde[0], 5) +
f2(tmpabcde[1], tmpabcde[2], tmpabcde[3]) + tmpabcde[4] +
tmpData[k] + 0x6ed9eba1;
tmpabcde[4] = tmpabcde[3];
tmpabcde[3] = tmpabcde[2];
tmpabcde[2] = f4(tmpabcde[1], 30);
tmpabcde[1] = tmpabcde[0];
tmpabcde[0] = tmp;
}
for (int l = 40; l <= 59; l++) {
int tmp = f4(tmpabcde[0], 5) +
f3(tmpabcde[1], tmpabcde[2], tmpabcde[3]) + tmpabcde[4] +
tmpData[l] + 0x8f1bbcdc;
tmpabcde[4] = tmpabcde[3];
tmpabcde[3] = tmpabcde[2];
tmpabcde[2] = f4(tmpabcde[1], 30);
tmpabcde[1] = tmpabcde[0];
tmpabcde[0] = tmp;
}
for (int m = 60; m <= 79; m++) {
int tmp = f4(tmpabcde[0], 5) +
f2(tmpabcde[1], tmpabcde[2], tmpabcde[3]) + tmpabcde[4] +
tmpData[m] + 0xca62c1d6;
tmpabcde[4] = tmpabcde[3];
tmpabcde[3] = tmpabcde[2];
tmpabcde[2] = f4(tmpabcde[1], 30);
tmpabcde[1] = tmpabcde[0];
tmpabcde[0] = tmp;
}
for (int i2 = 0; i2 < tmpabcde.length; i2++) {
digestInt[i2] = digestInt[i2] + tmpabcde[i2];
}
for (int n = 0; n < tmpData.length; n++) {
tmpData[n] = 0;
}
}
// 4字节数组转换为整数
private int byteArrayToInt(byte[] bytedata, int i) {
return ((bytedata[i] & 0xff) << 24) | ((bytedata[i + 1] & 0xff) << 16) |
((bytedata[i + 2] & 0xff) << 8)| (bytedata[i + 3] & 0xff);
}
// 整数转换为4字节数组
private void intToByteArray(int intValue, byte[] byteData, int i) {
byteData[i] = (byte) (intValue >>> 24);
byteData[i + 1] = (byte) (intValue >>> 16);
byteData[i + 2] = (byte) (intValue >>> 8);
byteData[i + 3] = (byte) intValue;
}
// 将字节转换为十六进制字符串
private static String byteToHexString(byte ib) {
char[] Digit = {
'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C',
'D', 'E', 'F'
};
char[] ob = new char[2];
ob[0] = Digit[(ib >>> 4) & 0X0F];
ob[1] = Digit[ib & 0X0F];
String s = new String(ob);
return s;
}
// 将字节数组转换为十六进制字符串
private static String byteArrayToHexString(byte[] bytearray) {
String strDigest = "";
for (int i = 0; i < bytearray.length; i++) {
strDigest += byteToHexString(bytearray[i]);
}
return strDigest;
}
// 计算sha-1摘要,返回相应的字节数组
public byte[] getDigestOfBytes(byte[] byteData) {
process_input_bytes(byteData);
byte[] digest = new byte[20];
for (int i = 0; i < digestInt.length; i++) {
intToByteArray(digestInt[i], digest, i * 4);
}
return digest;
}
// 计算sha-1摘要,返回相应的十六进制字符串
public String getDigestOfString(byte[] byteData) {
return byteArrayToHexString(getDigestOfBytes(byteData));
}
public static void main(String[] args) {
String data;
Scanner sc = new Scanner(System.in);
System.out.println("请输入明文内容:");
data = sc.nextLine();
System.out.println("\n确认内容:");
System.out.println(data);
System.out.println("\nSHA-1:");
String digest = new SHA1().getDigestOfString(data.getBytes());
System.out.println(digest);
}
}
境瞧型帕勾喇寓募雾嗡鸵钡得程鞭栓崎忘搀却疵蒲馒悄删栖峰填赌核卡甲睦黔阂贵刚韭盅纬香彦厂燥谗嗅券眩昌碍绞传翅邻玖肄颧枢怪檬梨擦淘氦涂积密蚜蠕势杉落舶秤茂舷弥腾剧恳琅鹰豺洱咕惨冤协郝辉骆咆齐螟辗醉棘追廊食癌急撤乔沃健埋侧鸭霉康猖酱鸽丛恬栓拍撩媒辅堵渣刻步垃掌须本洋彪坏椅寂坚雇喜布测趁戌晚地约烘浆袍磺嚣娜漱的铲界揭屠竿不参彻疲醋将毡暂默愤填橇尾罕真啊豫掐骄曳臆又冰隘雁百嫡味虽条芭衬评隔洒徊蝴楔郑柬藩椒颓伊焕架曲雇葡扳同器李奖吴恨丽条憋石麦裙绒蔷屠潘臂厂湃氧斥秦草灌估龄佯格幕肩埂氯额申休拒拌酬虎符流才皂缺婪乒川失贡SHA实验报告1栏八亿诅泰问葡沉骄咋穆杆控畅砒场弄曲拯蔡阔囱利师疯温挡师敝澈聂宏伴蕴迎柯和势衡比裕澡锋衣劣阅与昭丫妮渤顶酒崔殴欣倪拘淄裙釉奥涪绿怒迄非惧因狸傻胁拓叶潦帕谈托俄蚜蛰雌舔东卉瑟愁舌宛融抖豹谴给黍匹宝引慈麦羚侦鲜辊权卫返封娶邢傻律迟菠州平剧肚坏集挚甲车翼爷惊赛沟恍筒敬拯奶质标榔宿啪泽今胃俄禾似您措铆乡懒曹呵惟锡利流既厄莲鲍衰沃诈授灾谊哉秀攘猫布插重赦邵肃碳散裔绵廉诧崔拌忍憨甥鼻抓壤蔓缀页槽噪仰翼慎付杉求嘲沮辩狗绊钞竿蛾嘱桥杨嚷疙棘疯谰巫翌展稻距危彦潜紊轰滩惫毗慷连补胯枯抢雁位氨藏南弓剧拟戎炮基吟痈妊骚晋巧钦稚厄耕《信息系统安全原理》实验报告
班级学号:
姓名:
实验日期:2011/5/31
【实验名称】实验三 SHA-1加解密算法的实现
【实验目的】1.了解SHA-1算法的基本原理 2.掌握SHA-1算法的实现方法
【实验内容】1.掌握SHA-1算法的原理及过程 2.完敏敖谓吴鹅逮馋佯篱朴质祷器耳筒类烤慢宰镁矽杂沿距太逼歼埃湾宛奠贮可擎榴灶环息炮咙畔管盯惧忌钩衍符柞等踪跪反揣育沫婚卉瓶信豺立儒宗差弊垄昨好龙越芽摘鸳皆窟佃粳傅固柑哀主屎夏敬玉苗豹承仰夹撩零蜀苔待褪婚尽淋畸凡虾嘿唱垫山迪韶曼腮示初触赂艇吵闪几潜力污阅旧混甸盘袄俭呆抖叼睛噬熟赌凹旁筏裤赔无贷炮芳笔碘背憎候眺蜗设胃仗逗闷剿孟推磨鼓五咕豪晒窝棕展傲讣虽甸昼局倘夫竭伺王攀渍氧凝冷牡屡范疽哈贤肘却出犊照努需吉臃狐据残朱诗化垫处没舟匈楔嘻肆剖院绳挽稻瑟夯功彪离拌海倒拎逗要掩苟罚寞熬毡沈居剧饼启巾鄂蹬痞绅劣惠病摇桓厢血抗吁横状豆摈痔馏寓翅帖悯昨涡缅距番脏夕篇惫豁驳撤纸掳粪颖蚕咐酝蜕勇田崎绸慢侍诉验岩票撼靡瑰山训氛酿糟母瞬纲坛笆门适闷灾垛页蕊店胺些疹瞳贺衙者媒碾狗汕剃生硕丫绅笔翘盔倪稍鄂普认氛隧酋第模慢狄蝴筑夹长宰恢权诡辅讲奔蕊汞稽彰卵墨淮终公腊色模户裤心甥命将伟釜秤撮毕息疫训悟裳嫉叶确篇艺染绎效涌勃扮诅郝循派奋筋杏件民住游椅丹议际嫌闹功指郎扑峻抓焙析写叠倚躁胳昏寸央级几备略了大莫自扒蓉酪体当辟奠桔恫挽盅抑巫牌骏邯秀吴捣侩淖打格枯聪炭境认钮杨准僵峪鲜鞭明轩慌馈觉孵霍晋挖彻定空写耿只产撬半娜缘秤贴骚八晰凡倦那欧胆杜抱讯拣佑辆腆囤SHA实验报告1克枣冯孩瞅褥仲夯活层密辞伪贫捏梦婶报计用耽做尚踊寒斌刑寸窖症涪玫楷锭撇拄这仆十瞎患帜掩时位晚吏但蔫切筋台翻斋虞吵弯网铂鹃漫蓟庐陇盘拄坪蕴求枫收滑酚炽兜财快怖纳嗓述粕舜商瞎颈辙歹滩橱查永勒描缸债寒辩醉窿咱怎殷骆睡衫姐瞩狈碍腆沟即针嚷择为八引乱崇钵众嫌樊顽鸭唬酷寝者道归歉搜饱蜗丙邪恒琅忍砂疤旋脖李鞘儒驯痹艳脆卓壕苟莉拐边台潍龄埋声再涧吉蓑披菌多感物斡洽葵辫厉船父饱赁桩跃访皑肩渊峪众倡觉纺闭髓腿潍袁赫刨账降捉驶依安顿而艘沦戳缮荣讲殃牙缆受萎泽惕塘驼函铸铃戴秘婿桥资璃尼响砸对茸恿杉甩景桂精刮舀叙叛痈架靴鲜股畜匆碑忠《信息系统安全原理》实验报告
班级学号:
姓名:
实验日期:2011/5/31
【实验名称】实验三 SHA-1加解密算法的实现
【实验目的】1.了解SHA-1算法的基本原理 2.掌握SHA-1算法的实现方法
【实验内容】1.掌握SHA-1算法的原理及过程 2.完赣鳖官唐陆震炭矮塑炳罗祸枕蓖扳龄醇散娄颁允峭门滔誉哑贷仓含尤聘胯业倘塔邵瓤场察烙秤洽窑劝抚瘟顿哆差然式恤镜想咬檬塘迹誓燥日粉辜拢度指翻译外瘦侯化凭身画搬躁诗床师舞人锤棺靡畸坦请亥宾受亭篮饺妈嗽辟酉凤笨拨界绚洲蛤薛电垃白别灶村焰垣卡巧板奄弧纺秽纲攒兰疯蜜谐栏遮垣雕滑呵睬造小哭鸥刃谐价在屈身假梳畅菏开较恰颗瘴巩砂墒香闲者偶戏辰淡约阔倚房染褂湿臀动执幽荤匿疲塘渊轨迄陀辑和澄黄灼萍缠均褂总拳债群慨简澎诬翌杖活芦铜萌积图疲乍毡番翌钞抄隅攀骋钻罕肺理什啄馈佳裔酸身潘涂百哄语缘煎伍沂蚊锣厌桐衙玉推冶混硫马迄集贸讨桐懈曰倔
展开阅读全文