资源描述:
《北邮java智能卡实验报告3des加解密.docx》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、智能卡技术实验报告学院:电子工程学院班级:2011211204姓名:学号:2011210986实验四Java卡对称加密解密程序一、实验目的:建立Java卡3DES算法的加密解密程序,并进行Java卡程序的编译和调测。二、实验设备:PC机,智能卡读卡器,Java卡。三、实验内容:1.建立一个JavaCard工程2.编写3DES算法的加解密应用代码3.使用智能卡模拟器对应用代码进行调试4.使用Java卡对应用代码进行编译测试四、实验报告:1.设计一个3DES算法的加密解密小应用程序2.画出系统结构图
2、和各部分程序流程图3.完成程序的开发,然后再在Java卡上进行验证五、流程图系统结构流程:各部分流程图1)产生随机明文流程图2)3DES加密流程图3)3DES解密流程图六、演示模拟器随机产生8字节的明文:D4AA3503EC117A56,用时:1113us加密,密文:DCC74C5B43340FB7,用时:8445us解密,用时:6338us插卡产生明文:09FED7DA8FC3B90F,用时:83990us加密,产生密文:A447987D6FF5CC2C,用时:682482us解密,用时:64
3、1494us可以看出,插卡后比直接用模拟器,加密解密的时间长了很多。七、实验总结通过本次智能卡实验,我了解了对称加密的一些相关概念与知识,并学会了如何在智能卡上实现对称加解密。八、源代码packagedesthree;importjavacard.framework.*;importjavacard.security.*;importjavacardx.crypto.*;publicclassDesthreeextendsApplet{byte[]Random;byte[]ciphertext=
4、newbyte[256];byte[]translation=newbyte[256];privateDESKeydeskey;CipherCipherObj;privatebyte[]keyData1={0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08};//密钥privatebyte[]keyData2={0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18};privatebyte[]keyData3={0x21,0x22,0x23,
5、0x24,0x25,0x26,0x27,0x28};protectedDesthree(){register();}publicstaticvoidinstall(byte[]bArray,shortbOffset,bytebLength){newDesthree();}publicvoidprocess(APDUapdu)throwsISOException{byte[]buffer=apdu.getBuffer();if((buffer[ISO7816.OFFSET_CLA])==0&&(b
6、uffer[ISO7816.OFFSET_INS])==(byte)(0xa4))return;if(buffer[ISO7816.OFFSET_INS]==(byte)0x84){getRandom();//返回生成的8字节随机数Util.arrayCopyNonAtomic(Random,(short)0,buffer,(short)0,(short)8);apdu.setOutgoingAndSend((short)0,(short)8);}if(buffer[ISO7816.OFFSET
7、_INS]==(byte)0x83){apdu.setIncomingAndReceive();encrypt(buffer);//加密Util.arrayCopyNonAtomic(ciphertext,(short)16,buffer,(short)0,(short)8);apdu.setOutgoingAndSend((short)0,(short)8);}if(buffer[ISO7816.OFFSET_INS]==(byte)0x82){apdu.setIncomingAndRecei
8、ve();doAuthentication(buffer);//解密}}//执行加密过程的代码privatevoidencrypt(byte[]buffer){deskey=(DESKey)KeyBuilder.buildKey(KeyBuilder.TYPE_DES,KeyBuilder.LENGTH_DES,false);deskey.setKey(keyData1,(short)0);CipherObj=Cipher.getInstance(Cipher.ALG_DES_CBC_ISO97