java加密解密___des的简单实现

package com.cnse.pwdProtected.demo;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
import java.security.Security;
import javax.crypto.BadPaddingException;
import javax.crypto.Cipher;
import javax.crypto.IllegalBlockSizeException;
import javax.crypto.KeyGenerator;
import javax.crypto.NoSuchPaddingException;
import javax.crypto.SecretKey;
import com.sun.crypto.provider.SunJCE;
/**
 * @author kxw
 * java des的简单实现
 * @info des生成56为秘钥+8为奇偶校验位 共64位
 *DES算法把64位的明文输入块变为64位的密文输出块,它所使用的密钥也是64位,其算法主要分为两步: 1)初始置换
 *其功能是把输入的64位数据块按位重新组合,并把输出分为L0、R0两部分,每部分各长3
 *2位,其置换规则为将输入的第58位换到第一位,第50位换到第2位
 *依此类推,最后一位是原来的第7位。L0、R0则是换位输出后的两部分,L0是输出的左32位
 *R0是右32位,例:设置换前的输入值为D1D2D3
 *D64,则经过初始置换后的结果为:L0=D58D50……D8;R0=D57D49……D7。 2)逆置换
 *经过16次迭代运算后,得到L16、R16,将此作为输入,进行逆置换,逆置换正好是初始置换的逆运算,由此即得到密文输出。
 */
public class DesDemo {
 // KeyGenerator 提供对称密钥生成器的功能,支持各种算法
 private KeyGenerator keyGenerator;
 // SecretKey 负责保存对称密钥
 private SecretKey secretKey;
 // Cipher负责完成加密或解密工作
 private Cipher cipher;
 // 该字节数组负责保存加密的结果
 private byte[] desStrByte;
 //构造器初始化
 public DesDemo() throws Exception {
  Security.addProvider(new SunJCE());
  // 实例化支持DES算法的密钥生成器(算法名称命名需按规定,否则抛出异常)
  keyGenerator = KeyGenerator.getInstance("DES");
  // 生成密钥
  secretKey = keyGenerator.generateKey();
  // 生成Cipher对象,指定其支持的DES算法
  cipher = Cipher.getInstance("DES");
 }
 /**
  * main test
  */
 public static void main(String[] args) throws Exception {
  DesDemo des = new DesDemo();
  String msg = "123456";
  System.out.println("明文是:" + msg);
  byte[] encontent = des.desEncoder(msg);
  byte[] decontent = des.desDecoder(encontent);
  System.out.println("加密后:" + new String(encontent));
  System.out.println("解密后:" + new String(decontent));
 }
 /**
  * 对字符串加密
  */ 
 public byte[] desEncoder(String generalStr) throws Exception {
  // 根据密钥,对Cipher对象进行初始化,ENCRYPT_MODE表示加密模式
  cipher.init(Cipher.ENCRYPT_MODE, secretKey);
  byte[] src = generalStr.getBytes();
  // 加密,结果保存进cipherByte
  desStrByte = cipher.doFinal(src);
  return desStrByte;
 }
 /**
  * 对字符串解密
  */
 public byte[] desDecoder(byte[] buff) throws InvalidKeyException,
   IllegalBlockSizeException, BadPaddingException {
  // 根据密钥,对Cipher对象进行初始化,DECRYPT_MODE表示加密模式
  cipher.init(Cipher.DECRYPT_MODE, secretKey);
  desStrByte = cipher.doFinal(buff);
  return desStrByte;
 }
}

你可能感兴趣的:(java加密解密___des的简单实现)