• 三重DEC加密在java中的实现


    代码可以直接拷走使用,一些约定例如向量可以自行变动

    引言
         如今手机app五彩缤纷,确保手机用户的数据安全是开发人员必须掌握的技巧,下面通过实例介绍DES在android、ios、java平台的使用方法;
    DES加密是目前最常用的对称加密方式,性能优于非对称加密(RSA),是手机app请求数据加密的优先选择。
     

    DES简介:

         DES全称为Data Encryption Standard,即数据加密标准,是一种使用密钥加密的块算法, 算法的入口参数有三个:Key、Data、Mode。
         Key:为7个字节共56位,是DES算法的工作密钥;
         Data:为8个字节64位,是要被加密或被解密的数据;
         Mode:为DES的工作方式,有两种:加密或解密。
    3DES简介:
         3DES(或称为Triple DES)是三重数据加密算法(TDEA,Triple Data Encryption Algorithm)块密码的通称。它相当于是对每个数据块应用三次DES加密算法。由于计算机运算能力的增强,原版DES密码的密钥长度变得容易被暴力破解;3DES即是设计用来提供一种相对简单的方法,即通过增加DES的密钥长度来避免类似的攻击,而不是设计一种全新的块密码算法。因此比起最初的DES,3DES更为安全。
     
    加密实例:
         java版
     1 package com.v1.linxun.portal.utils;
     2  
     3 import java.security.Key;
     4  
     5 import javax.crypto.Cipher;
     6 import javax.crypto.SecretKeyFactory;
     7 import javax.crypto.spec.DESedeKeySpec;
     8 import javax.crypto.spec.IvParameterSpec;
     9  
    10 /**
    11  * 3DES加密工具类
    12  */
    13 public class Des3Util {
    14        // 密钥 长度不得小于24
    15        private final static String secretKey = "123456789012345678901234" ;
    16        // 向量 可有可无 终端后台也要约定
    17        private final static String iv = "01234567";
    18        // 加解密统一使用的编码方式
    19        private final static String encoding = "utf-8";
    20  
    21        /**
    22        * 3DES加密
    23        *
    24        * @param plainText
    25        *            普通文本
    26        * @return
    27        * @throws Exception
    28        */
    29        public static String encode(String plainText) throws Exception {
    30             Key deskey = null;
    31             DESedeKeySpec spec = new DESedeKeySpec(secretKey .getBytes());
    32             SecretKeyFactory keyfactory = SecretKeyFactory.getInstance( "desede");
    33              deskey = keyfactory.generateSecret( spec);
    34  
    35             Cipher cipher = Cipher.getInstance( "desede/CBC/PKCS5Padding");
    36             IvParameterSpec ips = new IvParameterSpec( iv.getBytes());
    37              cipher.init(Cipher. ENCRYPT_MODE, deskey, ips);
    38              byte[] encryptData = cipher.doFinal( plainText.getBytes( encoding));
    39              return Base64. encode( encryptData);
    40       }
    41  
    42        /**
    43        * 3DES解密
    44        *
    45        * @param encryptText
    46        *            加密文本
    47        * @return
    48        * @throws Exception
    49        */
    50        public static String decode(String encryptText) throws Exception {
    51             Key deskey = null;
    52             DESedeKeySpec spec = new DESedeKeySpec( secretKey.getBytes());
    53             SecretKeyFactory keyfactory = SecretKeyFactory.getInstance( "desede");
    54              deskey = keyfactory. generateSecret( spec);
    55             Cipher cipher = Cipher.getInstance( "desede/CBC/PKCS5Padding" );
    56             IvParameterSpec ips = new IvParameterSpec( iv.getBytes());
    57              cipher. init(Cipher. DECRYPT_MODE, deskey, ips);
    58  
    59              byte[] decryptData = cipher. doFinal(Base64. decode(encryptText ));
    60  
    61              return new String( decryptData, encoding);
    62       }
    63       
    64        public static void main(String args[]) throws Exception{
    65             String str = "我要开始加密啦" ;
    66             System. out.println( "----加密前-----:" + str );
    67             String encodeStr = Des3Util. encode( str);
    68             System. out.println( "----加密后-----:" + encodeStr );
    69             System. out.println( "----解密后-----:" + Des3Util.decode( encodeStr));
    70       }
    71 }
  • 相关阅读:
    leetcode ——187. 重复的DNA序列
    leetcode——30. 串联所有单词的子串
    leetcode——520. 检测大写字母
    leetcode——686. 重复叠加字符串匹配
    leetcode——459. 重复的子字符串
    leetcode——28. 实现 strStr()
    leetcode——17. 电话号码的字母组合
    leetcode——14. 最长公共前缀
    NAT模式实现局域网物理机与虚拟机的互通访问
    .Net Core项目发布到虚拟机(三)
  • 原文地址:https://www.cnblogs.com/jiliunyongjin/p/7878042.html
Copyright © 2020-2023  润新知