对称加密算法(1):DES

xiaoxiao2021-02-28  99

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

二.对称加密算法中常用的算法有: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); }

转载请注明原文地址: https://www.6miu.com/read-57378.html

最新回复(0)