知识大全 一个用JAVA开发的会话密钥程序,可能对你有所帮助
Posted 文件
篇首语:没关系,天空越黑,星星越亮。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 一个用JAVA开发的会话密钥程序,可能对你有所帮助相关的知识,希望对你有一定的参考价值。
一个用JAVA开发的会话密钥程序,可能对你有所帮助 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
//package /* 运行本程序你需要下载JCE Bouncy Castle的JCE with Provider and Ligheight API 网止是 配置如下 在WINDOWS中 你需要把下载的bcprov jdk jar文件拷贝到两个地方 一个在你安装的JDK目录中 比如说我的是C:\\j sdk rc\\jre\\lib\\ext 另一个在你的JDK运行环境中 我的是在C:\\Program Files\\Java\\j re rc\\lib\\ext 另外还要在对两个java security进行修改 我的在 C:\\j sdk rc\\jre\\lib\\security\\java security C:\\Program Files\\Java\\j re rc\\lib\\security\\java security; 在java security中加入 security provider = bouncycastle jce provider BouncyCastleProvider 如果一切顺利 你就可以运行本程序了 该程序具有对你的文件加解密功能 需要你指定的数据 程序中已给了接口 比如说你指定了要加密的文件名 txt 加密后的文件存放位置 txt 还有口令password如 liufeng 后 运行该程序 那么 txt 中将是 txt 的密文 注意口令是解密的钥匙 不要忘记 其他解密过程自己参考 本程序利用会话密钥加密 提供很多接口 如果你项目中需要加密过程 可以稍加改进为你所用 */ 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= ;//计算次数 在加盐中用到 private static byte[] publicKeyBytes;//公钥 private static byte[] privateKeyBytes;//私钥 private static String SessionKey;//会话密钥 public static String ENCRYPT_PRIVATEKEY_FILE= txt ;//该文件放置加密的私钥 private static String TEXT_FILE= txt ;//要加密的文件 private static String ENCRPTOR_TEXT_FILE= txt ;//被加密后的文件 private static String DENCRYPTOR_TEXT_FILE= 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 secretKey public static void createKey()throws Exception KeyPairGenerator keyPairGenerator=KeyPairGenerator getInstance( RSA ); keyPairGenerator initialize( ); KeyPair keyPair=keyPairGenerator genKeyPair(); //得到公钥的字节数组 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(); //通过给的口令加密私钥 private static byte[] passwordEncrypt(char[] password byte[] privateKeyBytes) throws Exception //create byte salt byte[] salt=new byte[ ]; Random random=new Random(); random nextBytes(salt); //create a PBE key and cipher 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 ENCRYPT_MODE key paramSpec); //Encrypt the byte[] byte[] cipherPriKey=cipher doFinal(privateKeyBytes); //write out salt and then the cipherPriKey ByteArrayOutputStream baos=new ByteArrayOutputStream(); baos write(salt); baos write(cipherPriKey); return baos toByteArray(); //用会话密钥加密给定的文件 然后用公钥加密会话密钥 并存入文件中 //最后加密后的文件由密钥长度+已加密的密钥(会话密钥)+密文 public static void encrypt()throws Exception //转换成RSA密钥 X EncodedKeySpec keySpec=new X EncodedKeySpec(publicKeyBytes); KeyFactory keyFactory=KeyFactory getInstance( RSA ); PublicKey publickey=keyFactory generatePublic(keySpec); //打开存贮密文的文件 DataOutputStream output=new DataOutputStream(new FileOutputStream(ENCRPTOR_TEXT_FILE)); //创建RSA的CIpher Cipher rsaCipher=Cipher getInstance( RSA/ECB/PKCS Padding ); rsaCipher init(Cipher ENCRYPT_MODE publickey); //创建会话密钥(Rijndael) KeyGenerator rijndaelKeyGenerator=KeyGenerator getInstance( Rijndael ); rijndaelKeyGenerator init( ); Key rijndaelKey=rijndaelKeyGenerator generateKey(); //公钥加密会话密钥 byte[] encodedKeyBytes=rsaCipher doFinal(rijndaelKey getEncoded()); output writeInt(encodedKeyBytes length); output write(encodedKeyBytes); //产生IV向量 SecureRandom random=new SecureRandom(); byte[] iv=new byte[ ]; random nextBytes(iv); output write(iv); //加密正文 IvParameterSpec spec=new IvParameterSpec(iv); Cipher symmetricCipher=Cipher getInstance( Rijndael/CBC/PKCS Padding ); symmetricCipher init(Cipher ENCRYPT_MODE rijndaelKey spec); CipherOutputStream cos=new CipherOutputStream(output symmetricCipher); FileInputStream input=new FileInputStream(TEXT_FILE); int theByte= ; while((theByte=input read())!= ) cos write(theByte); input close(); cos close(); return; //得到私钥 private static byte[] passwordDecrypt(char[] password byte[] ciphertext) throws Exception byte[] salt=new byte[ ]; ByteArrayInputStream bais=new ByteArrayInputStream(ciphertext); bais read(salt ); byte[] remainingCiphertext=new byte[ciphertext length ]; bais read(remainingCiphertext ciphertext length ); 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= ; while((theByte=fis read())!= ) baos writ cha138/Article/program/Java/hx/201311/26781相关参考
生成密钥对 生成密钥对可用java提供的类KeyPairGenerator用其中的getInstance方法创建KeypairGenerator对象在用initialize进行初始化最后用gen
Java中使用密钥库和算法创建数字证书 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 实例说明
用Java写一个在线金山词霸程序 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 代码贴上其它的就
一个用JAVA写测算服务器响应速度程序 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 任务描述
用JavaSwing作一个日历控制程序 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 日期是最基
知识大全 我是一个java程序员听说苏宁易购会很累,究竟累到啥程度,我昨天刚收到苏宁易购的offer
我是一个java程序员听说苏宁易购会很累,究竟累到啥程度,我昨天刚收到苏宁易购的offer?去不去呢?做程序开发的有几个不累的苏宁易购分拣员累吗?平时不累,可能电商活动的时候稍微累一点,因为每个分拣员
JAVA中Session的会话状态 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 会话状态的维持
如何优化JAVA程序开发,提高JAVA性能 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 通过使
Struts1.x系列教程(1):用MyEclipse开发第一个Struts程序 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容
Java桌面端程序开发 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! Java对于服务器个人电脑