知识大全 一个用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中编程实现数字签名系统

  生成密钥对  生成密钥对可用java提供的类KeyPairGenerator用其中的getInstance方法创建KeypairGenerator对象在用initialize进行初始化最后用gen

知识大全 Java中使用密钥库和算法创建数字证书

Java中使用密钥库和算法创建数字证书  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  实例说明 

知识大全 用Java写一个在线金山词霸程序

用Java写一个在线金山词霸程序  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  代码贴上其它的就

知识大全 一个用JAVA写测算服务器响应速度程序

一个用JAVA写测算服务器响应速度程序  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  任务描述 

知识大全 用Java Swing作一个日历控制程序

用JavaSwing作一个日历控制程序  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  日期是最基

知识大全 我是一个java程序员听说苏宁易购会很累,究竟累到啥程度,我昨天刚收到苏宁易购的offer

我是一个java程序员听说苏宁易购会很累,究竟累到啥程度,我昨天刚收到苏宁易购的offer?去不去呢?做程序开发的有几个不累的苏宁易购分拣员累吗?平时不累,可能电商活动的时候稍微累一点,因为每个分拣员

知识大全 JAVA中Session的会话状态

JAVA中Session的会话状态  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  会话状态的维持

知识大全 如何优化JAVA程序开发,提高JAVA性能

如何优化JAVA程序开发,提高JAVA性能  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  通过使

知识大全 用MyEclipse开发第一个Struts程序

Struts1.x系列教程(1):用MyEclipse开发第一个Struts程序  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容

知识大全 Java桌面端程序开发

Java桌面端程序开发  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  Java对于服务器个人电脑