您当前位置: 圣才学习网首页 >> IT类 >> Java程序设计

Java常见加密算法与数字证书(二)(2)

扫码手机阅读
用圣才电子书APP或微信扫一扫,在手机上阅读本文,也可分享给你的朋友。
评论(0
   
来源:网络 作者:未知
 
  Java代码
 
  import java.security.Key
 
  import java.security.SecureRandom
 
  import javax.crypto.Cipher
 
  import javax.crypto.KeyGenerator
 
  import javax.crypto.SecretKey
 
  import javax.crypto.SecretKeyFactory
 
  import javax.crypto.spec.DESKeySpec
 
  /**
 
  * DES安全编码组件
 
  *
 
  *
 
  支持 DESDESedeTripleDES,就是3DES)、AESBlowfishRC2RC4ARCFOUR
 
  * DES
 
  key size must be equal to 56
 
  * DESedeTripleDES
 
  key size must be equal to 112 or 168
 
  * AES
 
  key size must be equal to 128, 192 or 256but 192 and 256 bits may not be available
 
  * Blowfish
 
  key size must be multiple of 8, and can only range from 32 to 448 (inclusive
 
  * RC2
 
  key size must be between 40 and 1024 bitS
 
  * RC4ARCFOUR
 
  key size must be between 40 and 1024 bitS
 
  * 具体内容 需要关注 JDK Document http://.../docs/technotes/guides/security/SunProviders.html
 
  *
 
  * @author 梁栋
 
  * @version 1.0
 
  * @since 1.0
 
  */
 
  public abstract class DESCoder extends Coder {
 
  /**
 
  * ALGORITHM 算法
 
  * 可替换为以下任意一种算法,同时key值的size相应改变。
 
  *
 
  *
 
  st be multiple of 8, and can only range from 32 to 448 (inclusive
 
  * RC2
 
  key size must be between 40 and 1024 bitS
 
  * RC4ARCFOUR
 
  key size must be between 40 and 1024 bitS
 
  *
 
  * 在Key toKeybyte[] key)方法中使用下述代码
 
  *
 
  替换
 
  *
 
  = "DES"
 
  /**
 
  * 转换密钥
 
  *
 
  * @param key
 
  * @return
 
  * @throws Exception
 
  */
 
  private static Key toKeybyte[] key) throws Exception {
 
  DESKeySpec dks = new DESKeySpeckey);
 
  SecretKeyFactory keyFactory = SecretKeyFactory.getInstanceALGORITHM);
 
  SecretKey secretKey = keyFactory.generateSecretdks);
 
  // 当使用其他对称加密算法时,如AESBlowfish等算法时,用下述代码替换上述三行代码
 
  // SecretKey secretKey = new SecretKeySpeckey, ALGORITHM);
 
  return secretKey
 
  }
 
  /**
 
  * 解密
 
  *
 
  * @param data
 
  * @param key
 
  * @return
 
  * @throws Exception
 
  */
 
  public static byte[] decryptbyte[] data, String key) throws Exception {
 
  Key k = toKeydecryptBASE64key));
 
  Cipher cipher = Cipher.getInstanceALGORITHM);
 
  cipher.initCipher.DECRYPT_MODE, k);
 
  return cipher.doFinaldata);
 
  }
 
  /**
 
  * 加密
 
  *
 
  * @param data
 
  * @param key
 
  * @return
 
  * @throws Exception
 
  */
 
  public static byte[] encryptbyte[] data, String key) throws Exception {
 
  Key k = toKeydecryptBASE64key));
 
  Cipher cipher = Cipher.getInstanceALGORITHM);
 
  cipher.initCipher.ENCRYPT_MODE, k);
 
  return cipher.doFinaldata);
 
  }
 
  /**
 
  * 生成密钥
 
  *
 
  * @return
 
  * @throws Exception
 
  */
 
  public static String initKey() throws Exception {
 
  return initKeynull);
 
  }
 
  /**
 
  * 生成密钥
 
  *
 
  * @param seed
 
  * @return
 
  * @throws Exception
 
  */
 
  public static String initKeyString seed) throws Exception {
 
  SecureRandom secureRandom = null
 
  if (seed != null) {
 
  secureRandom = new SecureRandomdecryptBASE64seed));
 
  } else {
 
  secureRandom = new SecureRandom();
 
  }
 
  KeyGenerator kg = KeyGenerator.getInstanceALGORITHM);
 
  kg.initsecureRandom);
 
  SecretKey secretKey = kg.generateKey();
 
  return encryptBASE64secretKey.getEncoded());
 
  }
 
  }
 
  延续上一个类的实现,我们通过MD5以及SHA对字符串加密生成密钥,这是比较常见的密钥生成方式。
 
  再给出一个测试类:
 
  Java代码
 
  import static org.junit.Assert.*
 
  import org.junit.Test
 
  /** *//**
 
  *
 
  * @author by http://www.bt285.cn http://www.5a520.cn
 
  * @version 1.0
 
  * @since 1.0
 
  */
 
  public class DESCoderTest {
 
  @Test
 
  public void test() throws Exception {
 
  String inputStr "DES"
 
  String key DESCoder.initKey();
 
  System.err.println"原文:\t" inputStr);
 
  System.err.println"密钥:\t" key);
 
  byte[] inputData inputStr.getBytes();
 
  inputData DESCoder.encryptinputData key);
 
  System.err.println"加密后:\t" DESCoder.encryptBASE64inputData));
 
  byte[] outputData DESCoder.decryptinputData key);
 
  String outputStr new StringoutputData);
 
  System.err.println"解密后:\t" outputStr);
 
  assertEqualsinputStr outputStr);
 
  }
 
  }得到的输出内容如下:
 
  Console代码
 
  原文:
 
  DES
 
  密钥:
 
  f3wEtRrV6q0
 
  加密后:
 
  C6qe9oNIzRY
 
  解密后:
 
  DES
 
  由控制台得到的输出,我们能够比对加密、解密后结果一致。这是一种简单的加密解密方式,只有一个密钥。
 
  其实DES有很多同胞兄弟,如DESedeTripleDES)、AESBlowfishRC2RC4ARCFOUR)。这里就不过多阐述了,大同小异,只要换掉ALGORITHM换成对应的值,同时做一个代码替换SecretKey secretKey new SecretKeySpeckey ALGORITHM);就可以了,此外就是密钥长度不同了。
 
  Java代码
 
  /**
 
  * DES     key size must be equal to 56
 
  * DESedeTripleDES) key size must be equal to 112 or 168
 
  * AES     key size must be equal to 128, 192 or 256but 192 and 256 bits may not be available
 
  * Blowfish   key size must be multiple of 8, and can only range from 32 to 448 (inclusive
 
  * RC2     key size must be between 40 and 1024 bitS
 
  * RC4ARCFOUR) key size must be between 40 and 1024 bitS
 
  **/
 
  延续上一个类的实现,我们通过MD5以及SHA对字符串加密生成密钥,这是比较常见的密钥生成方式。
 
  再给出一个测试类:
 
  Java代码
 
  import static org.junit.Assert.*
 
  import org.junit.Test
 
  /** *//**
 
  *
 
  * @author by http://www.bt285.cn http://www.5a520.cn
 
  * @version 1.0
 
  * @since 1.0
 
  */
 
  public class DESCoderTest {
 
  @Test
 
  public void test() throws Exception {
 
  String inputStr "DES"
 
  String key DESCoder.initKey();
 
  System.err.println"原文:\t" inputStr);
 
  System.err.println"密钥:\t" key);
 
  byte[] inputData inputStr.getBytes();
 
  inputData DESCoder.encryptinputData key);
 
  System.err.println"加密后:\t" DESCoder.encryptBASE64inputData));
 
  byte[] outputData DESCoder.decryptinputData key);
 
  String outputStr new StringoutputData);
 
  System.err.println"解密后:\t" outputStr);
 
  assertEqualsinputStr outputStr);
 
  }
 
  }得到的输出内容如下:
 
  Console代码
 
  原文:
 
  DES
 
  密钥:
 
  f3wEtRrV6q0
 
  加密后:
 
  C6qe9oNIzRY
 
  解密后:
 
  DES
 
  由控制台得到的输出,我们能够比对加密、解密后结果一致。这是一种简单的加密解密方式,只有一个密钥。
 
  其实DES有很多同胞兄弟,如DESedeTripleDES)、AESBlowfishRC2RC4ARCFOUR)。这里就不过多阐述了,大同小异,只要换掉ALGORITHM换成对应的值,同时做一个代码替换SecretKey secretKey new SecretKeySpeckey ALGORITHM);就可以了,此外就是密钥长度不同了。
 
  Java代码
 
  /**
 
  * DES     key size must be equal to 56
 
  * DESedeTripleDES) key size must be equal to 112 or 168
 
  * AES     key size must be equal to 128, 192 or 256but 192 and 256 bits may not be available
 
  * Blowfish   key size must be multiple of 8, and can only range from 32 to 448 (inclusive
 
  * RC2     key size must be between 40 and 1024 bitS
 
  * RC4ARCFOUR) key size must be between 40 and 1024 bitS
 
**/
 
相关阅读
 
 

小编工资已与此挂钩!一一分钱!求打赏↓ ↓ ↓

如果你喜欢本文章,请赐赏:

已赐赏的人
最新评论(共0条)评论一句