java安全架构____DES加密解密

//README

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,将此作为输入,进行逆置换,逆置换正好是初始置换的逆运算,由此即得到密文输出。

//code代码

package com.security.des;

import java.security.NoSuchAlgorithmException;

import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.NoSuchPaddingException;
import javax.crypto.SecretKey;

/**
 * @author God
 * @info des生成56为秘钥+8为奇偶校验位 共64位
 */
public class DES {

	// KeyGenerator 提供对称密钥生成器的功能,支持各种算法
	private KeyGenerator keyGenerator;
	// SecretKey 负责保存对称密钥
	private SecretKey secretKey;
	// Cipher负责完成加密或解密工作
	private Cipher cipher;
	// 该字节数组负责保存加密的结果
	private byte[] cipherBytes;
	// 明文结果
	private byte[] clearBytes;
	//算法常量
	private static final String ALGORITHM="DES";
	//初始化
	public DES() throws NoSuchAlgorithmException, NoSuchPaddingException {
		//可以添加新的加密算法 
		//Security.addProvider(new SunJCE());
		// 实例化支持DES算法的密钥生成器(算法名称命名需按规定,否则抛出异常)
		keyGenerator = KeyGenerator.getInstance(ALGORITHM);
		// 生成密钥 也可以吧秘钥写到文件中保存
		secretKey = keyGenerator.generateKey();
		// 生成Cipher对象,指定其支持的DES算法
		cipher = Cipher.getInstance(ALGORITHM);
	}

	/**
	 * 对字符串加密
	 */
	public byte[] DesEncode(String clearText) {
		try {
			// 根据密钥,对Cipher对象进行初始化,ENCRYPT_MODE表示加密模式
			cipher.init(Cipher.ENCRYPT_MODE, secretKey);
			// 加密,结果保存进cipherByte
			cipherBytes = cipher.doFinal(clearText.getBytes());
		} catch (Exception e) {
			e.printStackTrace();
		}
		return cipherBytes;
	}

	/**
	 * 对字符串解密
	 */
	public byte[] DesDecode(byte[] cipherBytes)  {
		try {
			// 根据密钥,对Cipher对象进行初始化,DECRYPT_MODE表示加密模式
			cipher.init(Cipher.DECRYPT_MODE, secretKey);
			clearBytes = cipher.doFinal(cipherBytes);
		} catch (Exception e) {
			e.printStackTrace();
		}
		return clearBytes;
	}

	/**
	 * test
	 */
	public static void main(String[] args) throws Exception {
		DES des = new DES();
		String msg = "老司机开车了";
		System.out.println("明文是:" + msg);
		byte[] encontent = des.DesEncode(msg);
		byte[] decontent = des.DesDecode(encontent);
		System.out.println("加密后:" + new String(encontent));
		System.out.println("解密后:" + new String(decontent));
	}

}
//运行结果



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值