欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    实习4基于Diffle-Human的密钥交换.docx

    • 资源ID:66772973       资源大小:148.66KB        全文页数:10页
    • 资源格式: DOCX        下载积分:20金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要20金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    实习4基于Diffle-Human的密钥交换.docx

    实习四 基于Diffle-Human的密钥交换一、 实习目的1 理解密钥管理相关内容,熟悉Diffle-Human的密钥交换协议;2 在java平台上实现基于Diffle-Human的密钥交换。二、 实习要求1 实习前预习第7章的内容;2 熟悉java中java.security.*中相关的类。三、 实习内容1问题描述Diffle-Human算法是建立在DH公钥和私钥基础上的秘钥分配算法,如A需要和B共享密钥时,A和B各自生成DH的公钥和私钥,公钥对外公布而私钥各自秘密保存。2基本要求在java平台上实现基于Diffle-Human的密钥交换。3实现提示(1)利用公钥密码中的KeyGenerator类创建公钥密钥对,其参数指定为”DH”。另外在初始化时需要为DH指定的参数DHParameterSpec DHP=new DHParameterSpec(skip1024Modulus,skip1024Base); (2)skip1024Modulus指定模,skip1024Base指定基数。模和基数取值在Internet协议简单密钥管理标准中已经指定,在安装JSDK后,计算机的C盘中存在C:jsdk-1_4_0-docdocsguidesecurityjceJCERefGuide.html文件,其中包含密钥长度为1024的DH密钥中的模和基数的定义,可以直接复制下来,在JCERefGuide.html中查找1024 bit Diffle-Hellman modulus注释语句,将其下的skip1024ModulusBytes数组及BigInteger类型的skip1024Modulus和skip1024Base复制下来即可。(3)建立两个目录A和B,模拟需要秘密通信的A、B双方,DH算法需要A和B各自生成DH公钥和私钥。(4)java中KeyAgreement类实现了密钥协定,它使得init()方法传入自己的私钥,使用doPhase()方法传入对方的公钥,进而可以使用generateSecret()方法生成共享的信息。四、 实习过程编程思路(1) 生成 DH 参数DHParameterSpec DHP=new DHParameterSpec(skip1024Modulus,skip1024Base);分析:和RSA算法类似,DH算法涉及到一些指数和取模运算,DH参数指定A、B双方在创建DH密钥时所公用的基数和模(2) 创建密钥对生成器KeyPairGenerator kpg= KeyPairGenerator.getInstance("DH");分析:密钥对生成器即KeyPairGenerator类型的对象,通过其中预定义的一个静态方法getInstance()获取KeyPairGenerator类型的对象。getInstance()方法的参数指定为“DH”。(3) 初始化密钥生成器kpg.initialize(DHP);分析:初始化时使用的参数即第1步中生成的参数。(4) 生成密钥对,获取公钥和私钥KeyPair kp=kpg.genKeyPair();PublicKey pbk=kp.getPublic( );PrivateKey prk=kp.getPrivate( );分析:使用KeyPairGenerator类的genKeyPair()方法生成密钥对,进而使用密钥对的 getPublic( )和 getPrivate( )获取公钥和私钥。 Java 中 KeyAgreement 类实现了密钥协定,它使用 init( )方法传入自己的私钥,使用 doPhase( )方法传入对方的公钥,进而可以使用 generateSecret( )方法生成共享的信息具体步骤如下:(1) 读取自己的 DH 私钥和对方的 DH 公钥FileInputStream f1=new FileInputStream(args0);ObjectInputStream b1=new ObjectInputStream(f1);PublicKey pbk=(PublicKey)b1.readObject( );FileInputStream f2=new FileInputStream(args1);ObjectInputStream b2=new ObjectInputStream(f2);PrivateKey prk=(PrivateKey)b2.readObject( );分析:从文件中获取密钥。只是分为公钥和私钥两个文件,通过命令行参数传入公钥和私钥文件名,第一个命令行参数为对方的公钥文件名,第二个命令行参数为自己的私钥文件名。(2) 创建密钥协定对象KeyAgreement ka=KeyAgreement.getInstance("DH");分析:密钥协定对象即KeyAgreement类型的对象,和KeyPairGenerator类类似,KeyAgreement类是一个工厂类,通过其中预定义的一个静态方法getInstance()获取KeyAgreement类型的对象。getInstance()方法的参数指定为“DH”。(3) 初始化密钥协定对象ka.init(prk);分析:执行密钥协定对象的init()方法,传入第1步获得的自己的私钥,它在第1步中通过第2个命令行参数提供。(4) 执行密钥协定ka.doPhase(pbk,true);分析:执行密钥协定对象的doPhase()方法,其第一个参数中传入对方的公钥。(5) 生成共享信息byte sb=ka.generateSecret();分析:执行密钥协定对象的 generateSecret( )方法,返回字节类型的数组。A、B双方得到的该数组的内容完全相同,用它创建密钥也各方完全相同。如可使用SecretKeySpec k=new SecretKeySpec(sb,"DESede");创建密钥。流程图步骤1建立两个目录 A 和 B,模拟需要秘密通信的 A、B 双方,由于 DH 算法需要 A 和B 各自生成 DH 公钥和私钥,因此在这两个目录下都拷贝编译后文件 Key_DH。2这样,A、B 双方共享信息五、 实习代码package dh.a;import java.io.*;import java.math.*;import java.security.*;import java.security.spec.*;import javax.crypto.*;import javax.crypto.spec.*;import javax.crypto.interfaces.*;public class Key_DH /* * param args */The 1024 bit Diffie-Hellman modulus values used by SKIPprivate static final byte skip1024ModulusBytes= (byte)0xF4, (byte)0x88, (byte)0xFD, (byte)0x58, (byte)0x4E, (byte)0x49, (byte)0xDB, (byte)0xCD,(byte)0x20, (byte)0xB4, (byte)0x9D, (byte)0xE4,(byte)0x91, (byte)0x07, (byte)0x36, (byte)0x6B,(byte)0x33, (byte)0x6C, (byte)0x38, (byte)0x0D,(byte)0x45, (byte)0x1D, (byte)0x0F, (byte)0x7C,(byte)0x88, (byte)0xB3, (byte)0x1C, (byte)0x7C,(byte)0x5B, (byte)0x2D, (byte)0x8E, (byte)0xF6,(byte)0xF3, (byte)0xC9, (byte)0x23, (byte)0xC0,(byte)0x43, (byte)0xF0, (byte)0xA5, (byte)0x5B,(byte)0x18, (byte)0x8D, (byte)0x8E, (byte)0xBB, (byte)0x55, (byte)0x8C, (byte)0xB8, (byte)0x5D,(byte)0x38, (byte)0xD3, (byte)0x34, (byte)0xFD,(byte)0x7C, (byte)0x17, (byte)0x57, (byte)0x43,(byte)0xA3, (byte)0x1D, (byte)0x18, (byte)0x6C,(byte)0xDE, (byte)0x33, (byte)0x21, (byte)0x2C,(byte)0xB5, (byte)0x2A, (byte)0xFF, (byte)0x3C,(byte)0xE1, (byte)0xB1, (byte)0x29, (byte)0x40,(byte)0x18, (byte)0x11, (byte)0x8D, (byte)0x7C,(byte)0x84, (byte)0xA7, (byte)0x0A, (byte)0x72,(byte)0xD6, (byte)0x86, (byte)0xC4, (byte)0x03,(byte)0x19, (byte)0xC8, (byte)0x07, (byte)0x29,(byte)0x7A, (byte)0xCA, (byte)0x95, (byte)0x0C,(byte)0xD9, (byte)0x96, (byte)0x9F, (byte)0xAB,(byte)0xD0, (byte)0x0A, (byte)0x50, (byte)0x9B,(byte)0x02, (byte)0x46, (byte)0xD3, (byte)0x08,(byte)0x3D, (byte)0x66, (byte)0xA4, (byte)0x5D,(byte)0x41, (byte)0x9F, (byte)0x9C, (byte)0x7C,(byte)0xBD, (byte)0x89, (byte)0x4B, (byte)0x22,(byte)0x19, (byte)0x26, (byte)0xBA, (byte)0xAB,(byte)0xA2, (byte)0x5E, (byte)0xC3, (byte)0x55,(byte)0xE9, (byte)0x2F, (byte)0x78, (byte)0xC7; /The SKIP 1024 bit modulusprivate static final BigInteger skip1024Modulus = new BigInteger(1, skip1024ModulusBytes);/the base used with the skip 1024 bit modulusprivate static final BigInteger skip1024Base = BigInteger.valueOf(2);public static void main(String agrs )throws Exception/ DH 创建密钥对时所用到的基数和模DHParameterSpec DHP = new DHParameterSpec(skip1024Modulus, skip1024Base);KeyPairGenerator kpg = KeyPairGenerator.getInstance("DH");kpg.initialize(DHP);KeyPair kp = kpg.genKeyPair();PublicKey pbk = kp.getPublic();PrivateKey prk = kp.getPrivate();FileOutputStream f1 = new FileOutputStream("keyB1.dat");ObjectOutputStream b1 = new ObjectOutputStream(f1);b1.writeObject(pbk);FileOutputStream f2 = new FileOutputStream("keyB2.dat");ObjectOutputStream b2 = new ObjectOutputStream(f2);b2.writeObject(prk);package dh.a;import java.io.*;import java.math.*;import java.security.*;import java.security.spec.*;import javax.crypto.*;import javax.crypto.spec.*;import javax.crypto.interfaces.*;public class KeyAgree /* * param args */public static void main(String agrs )try/读取DH私钥和对方公钥FileInputStream f1 = new FileInputStream("keyB1.dat");ObjectInputStream b1 = new ObjectInputStream(f1);PublicKey pbk=(PublicKey)b1.readObject();FileInputStream f2 = new FileInputStream("keyA2.dat");ObjectInputStream b2 = new ObjectInputStream(f2);PrivateKey prk=(PrivateKey)b2.readObject();/创建秘钥协定对象KeyAgreement ka = KeyAgreement.getInstance("DH");/用自己的私钥初始化密钥协定对象ka.init(prk);/*执行密钥协定对象 * * */ka.doPhase(pbk, true);/生成共享信息 byte sb=ka.generateSecret(); for(int i=0;i<sb.length;i+) System.out.print(sbi+","); /创建秘钥 SecretKeySpec k=new SecretKeySpec(sb,"DESede");catch(Exception e)六、 实习总结基于Diffle-Human的密钥交换是建立在DH公钥和私钥基础上的密钥分配算法,这次实习的内容和上次的基本接近,但是,我还是花了好久的时间搞清楚老师给的实验指导里函数的含义,明白密钥交换原理,总之,这次实习收获不小,我会再接再厉的。

    注意事项

    本文(实习4基于Diffle-Human的密钥交换.docx)为本站会员(飞****2)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开