对称加密算法(1):DES

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_31301681/article/details/77753574

一.对称加密:采用单钥密码系统的加密方法,同一个密钥可以同时用作信息的加密和解密,这种加密方法称为对称加密,也称为单密钥加密

二.对称加密算法中常用的算法有:DES3DES、TDEA、Blowfish、RC2、RC4、RC5IDEA、SKIPJACK、AES 等

三.优缺点:

对称加密算法的优点是算法公开、计算量小、加密速度快、加密效率高。
对称加密算法的缺点是在数据传送前,发送方和接收方必须商定好秘钥,然后使双方都能保存好秘钥。其次如果一方的秘钥被泄露,那么加密信息也就不安全了。另外,每对用户每次使用对称加密算法时,都需要使用其他人不知道的唯一秘钥,这会使得收、发双方所拥有的钥匙数量巨大,密钥管理成为双方的负担

DES 的实现方式:jdk 的实现 , BouncyCastle 的实现方式,两者的实现方式很相似,只是获取秘钥使用不同的累去获取 
/**
	 * 生成秘钥 
	 * @return
	 * @throws Exception
	 */
	public static byte [] JDK_DES_GetSecretKey() throws Exception{
		KeyGenerator keyGenerator = KeyGenerator.getInstance("DES");
		keyGenerator.init(56);  // 秘钥的长度 
		SecretKey secretKey = keyGenerator.generateKey();
		return secretKey.getEncoded();
	}
	
	/**
	 * 生成秘钥 
	 * @return
	 * @throws Exception
	 */
	public static byte [] BC_DES_GetSecretKey() throws Exception{
		Security.addProvider(new BouncyCastleProvider());
		KeyGenerator keyGenerator = KeyGenerator.getInstance("DES","BC");
		keyGenerator.init(56);  // 秘钥的长度 
		SecretKey secretKey = keyGenerator.generateKey();
		return secretKey.getEncoded();
	}
	
	/**
	 * 使用  des 对数据进行加密 
	 * @param src    需要加密的数据
	 * @param encryptKey   加密的秘钥 
	 * @return
	 * @throws Exception
	 */
	public static byte [] JDK_DES_Encrypt(String src,byte [] encryptKey) throws Exception{
		//Key 的转换
		DESKeySpec keySpec = new DESKeySpec(encryptKey);
		SecretKeyFactory factory = SecretKeyFactory.getInstance("DES");
		Key secretKey = factory.generateSecret(keySpec);
		
		//加密
		Cipher cipher = Cipher.getInstance("DES/ECB/PKCS5Padding");
		cipher.init(Cipher.ENCRYPT_MODE, secretKey);
		byte [] result = cipher.doFinal(src.getBytes());
		return result;
	}
	
	/**
	 * 使用 des 对数据进行解密 
	 * @param bytes     需要解密的数组
	 * @param encryptKey   解密的秘钥 
	 * @return
	 * @throws Exception
	 */
	public static String JDK_DES_Decrypt(byte [] encryptBytes ,byte [] encryptKey) throws Exception{
		//Key 的转换
		DESKeySpec keySpec = new DESKeySpec(encryptKey);
		SecretKeyFactory factory = SecretKeyFactory.getInstance("DES");
		Key secretKey = factory.generateSecret(keySpec);
		
		//加密
		Cipher cipher = Cipher.getInstance("DES/ECB/PKCS5Padding");
		cipher.init(Cipher.DECRYPT_MODE, secretKey);
		String result = new String(cipher.doFinal(encryptBytes));
		return result;
	}
	
	/**
	 * 使用  des 对数据进行加密 
	 * @param src    需要加密的数据
	 * @param encryptKey   加密的秘钥 
	 * @return
	 * @throws Exception
	 */
	public static byte [] BC_DES_Encrypt(String src,byte [] encryptKey) throws Exception{
		return JDK_DES_Encrypt(src,encryptKey);
	}
	
	/**
	 * 使用  des 对数据进行解密 
	 * @param bytes     需要解密的数组
	 * @param encryptKey   解密的秘钥 
	 * @return
	 * @throws Exception
	 */
	public static String BC_DES_Decrypt(byte [] encryptBytes ,byte [] encryptKey) throws Exception{
		return JDK_DES_Decrypt(encryptBytes,encryptKey);
	}





猜你喜欢

转载自blog.csdn.net/qq_31301681/article/details/77753574