实验一加密解密实验一、实验目的:通过JAVA语言,来实现对称密钥加密算法,非对称秘钥加密算法对信息的加密解密,通过实际操作加深学生对对称密钥加密、非对称秘钥加密解密的理解。二、实验内容:安装JDK,配置Java开发环境,加压eclipse,编写对称秘钥的生成、对称密钥加密、解密的程序。编写非对称秘钥加密解密的程序,用私钥对信息进行加密,用公钥对信息进行解密,然后用公钥对信息进行加密,用私钥对信息进行解密。三、实验用到的主要技术及工具主要技术:Java、BouncyCastle主要工具:Eclipse四、开发步骤:1、安装JDK,配置JAVA环境变量。2、解压eclipse。3、在eclipse中新建项目4、编写使用DES算法生成秘钥的程序。1.初始化密钥,并对密钥进行Base64位编码5、使用生成的秘钥对“电子商务安全技术”进行加密。加密,使用生成的密钥和明文作为参数进行传递,并使用密钥对明文加密以下是对明文进行初始化,在第4点中已对密钥初始化已下是加密算法6、用第4步骤中生成的秘钥对第5部中生成的加密后的内容进行解密。inputData为第五步中出现的加密过后的明文,由于DES为对称加密,所以解密密钥key和加密密钥key使用的是同一把密钥以下是解密算法:以下是DES加密与解密算法的结果7、使用AES算法重复4-6步骤。8、使用RSA算法生成公钥和私钥。对密钥进行初始化取得公钥取得私钥对密钥进行编码并输出到控制台获取明文,并对明文进行编码9、用公钥对“电子商务安全技术RSA”进行加密。以下是加密算法10、用私钥对第九步中加密的信息进行解密。私钥解密:以下是解密算法11、用生成的私钥对“电子商务安全技术RSA”进行加密。12、用公钥对11步中的信息进行解密。私钥加密算法公钥解密算法:以下是其中一次进行加密与解密的情况13、请把你的公钥发送给你旁边的同学,让该同学用公钥进行加密,然后再把加密后的信息发送给你,你再用你的私钥对信息进行解密。使用其中的一对公钥和私钥,并对公钥加密的数据进行私钥解密,对私钥加密的数据进行公钥解密以下是固定公钥和私钥,公钥加密的密文,私钥加密的密钥以公钥解密为例对私钥加密的密文进行解码,同时也对传输过来的公钥进行同样的解码byte[]encodedData1=Base64.decodeBase64(PriMi);publicKey=Base64.decodeBase64(pubKey);使用解码的密文和公钥对数据进行解密byte[]pri_pub_Data=Demo.decryptByPublicKey(encodedData1,publicKey);以下附上完整代码:DESDemo.javapackagecn.xupt.YVCB.code;importjava.security.Key;importjava.security.Security;importjavax.crypto.Cipher;importjavax.crypto.KeyGenerator;importjavax.crypto.SecretKey;importjavax.crypto.SecretKeyFactory;importjavax.crypto.spec.DESKeySpec;importorg.apache.commons.codec.binary.Base64;importorg.bouncycastle.jce.provider.BouncyCastleProvider;publicclassDESDemo{//加密算法publicstaticfinalStringKEY_ALGORITHM=DES;publicstaticfinalStringCIPHER_ALGORITHM=DES/ECB/PKCS5Padding;/***对密钥进行初始化,并返回字节码*@return*@throwsException*/publicstaticbyte[]initKey()throwsException{KeyGeneratorkg=KeyGenerator.getInstance(KEY_ALGORITHM);kg.init(64);//初始化的密钥的长度SecretKeysecretKey=kg.generateKey();returnsecretKey.getEncoded();}publicstaticKeytoKey(byte[]key)throwsException{//实例化DES密钥材料DESKeySpecdks=newDESKeySpec(key);//实例化秘密密钥莞式服务SecretKeyFactorykeyFactory=SecretKeyFactory.getInstance(KEY_ALGORITHM);//生成秘密密钥SecretKeysecretKey=keyFactory.generateSecret(dks);returnsecretKey;}/***解密*@paramdata*@paramkey*@return*@throwsException*/publicstaticbyte[]decrypt(byte[]data,byte[]key)throwsException{Keyk=toKey(key);//还原密钥Ciphercipher=Cipher.getInstance(CIPHER_ALGORITHM);cipher.init(Cipher.DECRYPT_MODE,k);returncipher.doFinal(data);}/***加密*@paramdata需要加密的数据*@paramkey加密密钥*@return*@throwsException*/publicstaticbyte[]encrypt(byte[]data,byte[]key)throwsException{Keyk=toKey(key);//还原密钥Ciphercipher=Cipher.getInstance(CIPHER_ALGORITHM);//实例化cipher.init(Cipher.ENCRYPT_MODE,k);//初始化,设置为解密模式returncipher.doFinal(data);//执行操作}publicstaticvoidtest(Stringstr)throwsException{Security.addProvider(newBouncyCastleProvider());StringinputStr=str+使用DES加密与解密;//获取字符串byte[]inputData=inputStr.getBytes();//将字符转换成二风景进制System.err.println(\n============使用DES加密与解密==================);System.err.println(原文:+inputStr);//打印转换后的字节码//初始化密钥byte[]key=DESDemo.initKey();System.err.println(密钥编码前:+key);System.err.println(密钥:+Base64.encodeBase64String(key));//加密inputData=DESDemo.encrypt(inputData,key);System.err.println(加密后:+Base64.encodeBase64String(inputData));//解密byte[]outputData=DESDemo.decrypt(inputData,key);StringoutputStr=newString(outputData);System.err.println(解密后:+outputStr);System.err.println(===========DES加密与解密完成========);}}RSADemo.javapackagecn.xupt.YVCB.code;importjava.security.*;importjava.security.interfaces.*;importjava.security.spec.*;importjava.util.*;importjavax.crypto.Cipher;importorg.apache.commons.codec.binary.Base64;publicclassRSADemo{privatestaticbyte[]publicKey;privatestaticbyte[]privateKey;//非对称加密算法:RSApublicstaticfinalStringKEY_ALGORITHM=RSA;//公钥privatestaticfinalStringPUBLIC_KEY=RSAPublicKey;//私钥privatestaticfinalStringPRIVATE_KEY=RSAPrivateKey;//密钥长度privatestaticfinalintKEY_SIZE=512;/***初始化密钥**@returnkeyMap密钥Map*@throwsException*/publicstaticMapString,ObjectinitKey()throwsException{KeyPairGeneratorkeyPairgen=KeyPairGenerator.getInstance(KEY_ALGORITHM);//实例化密钥对生成器keyPairgen.initialize(KEY_SIZE);//初始化密钥对生成器KeyPairkeyPair=keyPairgen.generateKeyPair();//生成密钥对RSAPublicKeypublicKey=(RSAPublicKey)keyPair.getPublic();//生成公钥RSAPrivateKeyprivateKey=(RSAPrivateKey)keyPair.getPrivate();//生成私钥MapString,ObjectkeyMap=newHashMapString,Object(2);//封闭密钥keyMap.put(PUBLIC_KEY,publicKey);keyMap.put(PRIVATE_KEY,privateKey);returnkeyMap;}/***获取私钥**@paramkeyMap*密钥Map*@return返回私钥二进制*@throwsException*/publicstaticbyte[]getPrivateKey(MapString,ObjectkeyMap)throwsException{Keykey=(Key)keyMap.get(PRIVATE_KEY);returnkey.getEncoded();}/***取得公钥**@paramkeyMap*公钥Map*@return*@throwsException*/publicstaticbyte[]getPublicKey(MapString,ObjectkeyMap)throwsException{Keykey=(Key)keyMap.get(PUBLIC_KEY);returnkey.getEncoded();}/***使用私钥进行加密**@paramdata*@paramkey*@return*@throwsException*/publicstaticbyte[]decryptByPrivateKey(byte[]data,byte[]key)throwsException{//取得私钥PKCS8EncodedKeySpecpkcs8KeySpec=newPKCS8EncodedKeySpec(key);KeyFactorykeyFactory=KeyFactory.getInstance(KEY_ALGORITHM);//生成私钥PrivateK