亚洲精品久久久中文字幕-亚洲精品久久片久久-亚洲精品久久青草-亚洲精品久久婷婷爱久久婷婷-亚洲精品久久午夜香蕉

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

一個(gè)用JAVA開(kāi)發(fā)的會(huì)話密鑰程序

瀏覽:6日期:2024-07-01 08:33:56
內(nèi)容: 出處 CN-JAVA原創(chuàng):liufen//package /*運(yùn)行本程序你需要下載JCE,Bouncy Castle的JCE with Provider and Lightweight API網(wǎng)止是 http://www.bouncycastle.org 配置如下:在WINDOWS中,你需要把下載的bcprov-jdk14-119.jar文件拷貝到兩個(gè)地方:一個(gè)在你安裝的JDK目錄中,比如說(shuō)我的是C:j2sdk1.4.0-rcjrelibext另一個(gè)在你的JDK運(yùn)行環(huán)境中,我的是在C:Program FilesJavaj2re1.4.0-rclibext;另外還要在對(duì)兩個(gè)java.security進(jìn)行修改:我的在 C:j2sdk1.4.0-rcjrelibsecurityjava.security;C:Program FilesJavaj2re1.4.0-rclibsecurityjava.security;在java.security中加入 security.provider.6=org.bouncycastle.jce.provider.BouncyCastleProvider 如果一切順利,你就可以運(yùn)行本程序了。該程序具有對(duì)你的文件加解密功能。需要你指定的數(shù)據(jù),程序中已給了接口。比如說(shuō)你指定了要加密的文件名'4.txt',加密后的文件存放位置'6.txt',還有口令password如'liufeng'后,運(yùn)行該程序,那么'6.txt' 中將是'4.txt'的密文。注意口令是解密的鑰匙,不要忘記。其他解密過(guò)程自己參考。本程序利用會(huì)話密鑰加密,提供很多接口。如果你項(xiàng)目中需要加密過(guò)程,可以稍加改進(jìn)為你所用*/import java.security.*;import java.security.spec.*;import javax.crypto.*;import javax.crypto.spec.*;import java.io.*;import java.util.*;public class FileEncryptorRSA {private static final int ITERATIONS=1000;//計(jì)算次數(shù),在加鹽中用到private static byte[] publicKeyBytes;//公鑰private static byte[] privateKeyBytes;//私鑰private static String SessionKey;//會(huì)話密鑰public static String ENCRYPT_PRIVATEKEY_FILE='1.txt';//該文件放置加密的私鑰 private static String TEXT_FILE='4.txt';//要加密的文件private static String ENCRPTOR_TEXT_FILE='5.txt';//被加密后的文件private static String DENCRYPTOR_TEXT_FILE='6.txt';//解密后的文件private static String password='liufeng';//口令用于加密私鑰public void setTEXT_FILE(String fileName){TEXT_FILE=fileName;}public void setENCRYPT_PRIVATEKEY_FILE(String fileName){ENCRYPT_PRIVATEKEY_FILE=fileName;}public String getENCRYPT_PRIVATEKEY_FILE(){return ENCRYPT_PRIVATEKEY_FILE;}public void setENCRPTOR_TEXT_FILE(String fileName){ENCRPTOR_TEXT_FILE=fileName;}public String getENCRPTOR_TEXT_FILE(){return ENCRPTOR_TEXT_FILE;}public void setDENCRYPTOR_TEXT_FILE(String fileName){DENCRYPTOR_TEXT_FILE=fileName;}public String getDENCRYPTOR_TEXT_FILE(){return DENCRYPTOR_TEXT_FILE;}public void setPassword(String password){this.password=password;}//create a RSA secretKeypublic static void createKey()throws Exception{KeyPairGenerator keyPairGenerator=KeyPairGenerator.getInstance('RSA');keyPairGenerator.initialize(1024);KeyPair keyPair=keyPairGenerator.genKeyPair();//得到公鑰的字節(jié)數(shù)組publicKeyBytes=keyPair.getPublic().getEncoded();//得到私鑰byte[] privateKeyBytes=keyPair.getPrivate().getEncoded();byte[] encrytedPrivatekey=passwordEncrypt(password.toCharArray(),privateKeyBytes);FileOutputStream fos=new FileOutputStream(ENCRYPT_PRIVATEKEY_FILE);fos.write(encrytedPrivatekey);fos.close();}//通過(guò)給的口令加密私鑰private static byte[] passwordEncrypt(char[] password,byte[] privateKeyBytes)throws Exception{//create 8 byte salt byte[] salt=new byte[8];Random random=new Random();random.nextBytes(salt);//create a PBE key and cipherPBEKeySpec keySpec=new PBEKeySpec(password);SecretKeyFactory keyFactory=SecretKeyFactory.getInstance('PBEWithSHAAndTwofish-CBC');SecretKey key=keyFactory.generateSecret(keySpec);PBEParameterSpec paramSpec=new PBEParameterSpec(salt,ITERATIONS);Cipher cipher=Cipher.getInstance('PBEWithSHAAndTwofish-CBC');cipher.init(Cipher.ENCRYPT_MODE,key,paramSpec);//Encrypt the byte[]byte[] cipherPriKey=cipher.doFinal(privateKeyBytes);//write out salt ,and then the cipherPriKeyByteArrayOutputStream baos=new ByteArrayOutputStream();baos.write(salt);baos.write(cipherPriKey);return baos.toByteArray();} //用會(huì)話密鑰加密給定的文件,然后用公鑰加密會(huì)話密鑰,并存入文件中//最后加密后的文件由密鑰長(zhǎng)度+已加密的密鑰(會(huì)話密鑰)+密文public static void encrypt()throws Exception{//轉(zhuǎn)換成RSA密鑰X509EncodedKeySpec keySpec=new X509EncodedKeySpec(publicKeyBytes);KeyFactory keyFactory=KeyFactory.getInstance('RSA');PublicKey publickey=keyFactory.generatePublic(keySpec);//打開(kāi)存貯密文的文件DataOutputStream output=new DataOutputStream(new FileOutputStream(ENCRPTOR_TEXT_FILE));//創(chuàng)建RSA的CIpherCipher rsaCipher=Cipher.getInstance('RSA/ECB/PKCS1Padding');rsaCipher.init(Cipher.ENCRYPT_MODE,publickey);//創(chuàng)建會(huì)話密鑰(Rijndael)KeyGenerator rijndaelKeyGenerator=KeyGenerator.getInstance('Rijndael');rijndaelKeyGenerator.init(256);Key rijndaelKey=rijndaelKeyGenerator.generateKey();//公鑰加密會(huì)話密鑰 byte[] encodedKeyBytes=rsaCipher.doFinal(rijndaelKey.getEncoded());output.writeInt(encodedKeyBytes.length);output.write(encodedKeyBytes);//產(chǎn)生IV向量SecureRandom random=new SecureRandom();byte[] iv=new byte[16];random.nextBytes(iv);output.write(iv);//加密正文IvParameterSpec spec=new IvParameterSpec(iv);Cipher symmetricCipher=Cipher.getInstance('Rijndael/CBC/PKCS5Padding');symmetricCipher.init(Cipher.ENCRYPT_MODE,rijndaelKey,spec);CipherOutputStream cos=new CipherOutputStream(output,symmetricCipher);FileInputStream input=new FileInputStream(TEXT_FILE);int theByte=0;while((theByte=input.read())!=-1){cos.write(theByte);}input.close();cos.close();return;}//得到私鑰private static byte[] passwordDecrypt(char[] password,byte[] ciphertext)throws Exception{byte[] salt=new byte[8];ByteArrayInputStream bais=new ByteArrayInputStream(ciphertext);bais.read(salt,0,8);byte[] remainingCiphertext=new byte[ciphertext.length-8];bais.read(remainingCiphertext,0,ciphertext.length-8);PBEKeySpec keySpec=new PBEKeySpec(password);SecretKeyFactory keyFactory=SecretKeyFactory.getInstance('PBEWithSHAAndTwofish-CBC');SecretKey key=keyFactory.generateSecret(keySpec);PBEParameterSpec paramSpec=new PBEParameterSpec(salt,ITERATIONS);Cipher cipher=Cipher.getInstance('PBEWithSHAAndTwofish-CBC');cipher.init(Cipher.DECRYPT_MODE,key,paramSpec);return cipher.doFinal(remainingCiphertext);}//解密加密的文件 public static void decrypt()throws Exception{FileInputStream fis=new FileInputStream(ENCRYPT_PRIVATEKEY_FILE);ByteArrayOutputStream baos=new ByteArrayOutputStream();int theByte=0;while((theByte=fis.read())!=-1){baos.write(theByte);}fis.close();//得到被加密的私鑰byte[] keyBytes=baos.toByteArray();baos.close();//得到私鑰byte[] sKey=passwordDecrypt(password.toCharArray(),keyBytes);//產(chǎn)生RSA私鑰PKCS8EncodedKeySpec keySpec=new PKCS8EncodedKeySpec(sKey);KeyFactory keyFactory=KeyFactory.getInstance('RSA');PrivateKey privateKey=keyFactory.generatePrivate(keySpec);Cipher rsaCipher=Cipher.getInstance('RSA/ECB/PKCS1Padding');DataInputStream dis=new DataInputStream(new FileInputStream(ENCRPTOR_TEXT_FILE));//讀密文中密碼長(zhǎng)度和密碼 byte[] encryptedKeyBytes=new byte[dis.readInt()];dis.readFully(encryptedKeyBytes);rsaCipher.init(Cipher.DECRYPT_MODE,privateKey);byte[] rijdaelKeyBytes=rsaCipher.doFinal(encryptedKeyBytes);//得到會(huì)話密鑰SecretKey rijndaelKey=new SecretKeySpec(rijdaelKeyBytes,'Rijndael');byte[] iv=new byte[16];dis.read(iv);IvParameterSpec spec=new IvParameterSpec(iv);//用會(huì)話密鑰解密正文Cipher cipher=Cipher.getInstance('Rijndael/CBC/PKCS5Padding');cipher.init(Cipher.DECRYPT_MODE,rijndaelKey,spec);CipherInputStream cis=new CipherInputStream(dis,cipher);FileOutputStream fos=new FileOutputStream(DENCRYPTOR_TEXT_FILE);theByte=0;while((theByte=cis.read())!=-1){fos.write(theByte);}cis.close();fos.close();return;}public static void main(String[] args)throws Exception{createKey();encrypt();decrypt();}} Java, java, J2SE, j2se, J2EE, j2ee, J2ME, j2me, ejb, ejb3, JBOSS, jboss, spring, hibernate, jdo, struts, webwork, ajax, AJAX, mysql, MySQL, Oracle, Weblogic, Websphere, scjp, scjd
標(biāo)簽: Java
相關(guān)文章:
主站蜘蛛池模板: 91香蕉视频在线播放 | 91精品全国免费观看含羞草 | 哦哦哦用力视频在线观看 | 国产免费久久精品久久久 | 亚洲精品一区二区三区在线播放 | 一个人看的ww免费视频 | 一级裸片 | 亚洲视频区 | 1024在线视频国产在线播放 | 久久久精品久久久久特色影视 | 国产xxx视频 | 日本va视频 | 中日韩欧美在线观看 | 国内自拍第五一页 | 丝袜 亚洲 另类 欧美 变态 | 黄视频在线 | 美国一级毛片免费看成人 | 欧美成人一级视频 | 日韩女同一区二区三区 | 日韩手机在线免费视频 | 国产一区二区免费在线 | 欧美艳星性videose精品 | 欧美一级久久久久久久久大 | 色婷婷影院在线视频免费播放 | 国产精品综合久成人 | 色在线观看视频 | 日本亚洲成高清一区二区三区 | 69成人做爰视频在线观看 | 日韩精品久久久毛片一区二区 | 精品国产高清a毛片 | 日韩女人毛片在线播放 | 91精品国产一区二区三区左线 | 久久久免费观成人影院 | 亚洲国产精品热久久2022 | 一区二区三区日韩精品 | 国产一级一片免费播放视频 | 青青青青青国产免费手机看视频 | 九九99九九视频在线观看 | 免费一级欧美毛片 | 免费看国产做爰大片 | 国产chinesehdxxxx大胸 |