加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

【Android工具类】如何保证Android与服务器的DES加密保持一致

发布时间:2020-12-15 03:23:38 所属栏目:Java 来源:网络整理
导读:今天PHP站长网 52php.cn把收集自互联网的代码分享给大家,仅供参考。 转载请注明出处:http://blog.csdn.net/zhaokaiqiang1992 package com.qust.rollcallstudent.utils; import java.security.InvalidAlgorithmParameter

以下代码由PHP站长网 52php.cn收集自互联网

现在PHP站长网小编把它分享给大家,仅供参考

转载请注明出处: http://blog.csdn.net/zhaokaiqiang1992
    package com.qust.rollcallstudent.utils;  
      
    import java.security.InvalidAlgorithmParameterException;  
    import java.security.Key;  
    import java.security.spec.AlgorithmParameterSpec;  
    import java.util.Locale;  
      
    import javax.crypto.Cipher;  
    import javax.crypto.SecretKeyFactory;  
    import javax.crypto.spec.DESKeySpec;  
    import javax.crypto.spec.IvParameterSpec;  
      
    /** 
     *  
     * @ClassName: com.qust.rollcallstudent.utils.DESUtil 
     * @Description: DES加密解密工具包 
     * @author zhaokaiqiang 
     * @date 2014-11-13 下午8:40:56 
     *  
     */  
    public class DESUtil {  
      
        public static final String ALGORITHM_DES = "DES/CBC/PKCS5Padding";  
      
        /** 
         * DES算法,加密 
         *  
         * @param data 
         *            待加密字符串 
         * @param key 
         *            加密私钥,长度不能够小于8位 
         * @return 加密后的字节数组,一般结合Base64编码使用 
         * @throws InvalidAlgorithmParameterException 
         * @throws Exception 
         */  
        public static String encode(String key,String data) {  
            if (data == null)  
                return null;  
            try {  
                DESKeySpec dks = new DESKeySpec(key.getBytes());  
                SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");  
                // key的长度不能够小于8位字节  
                Key secretKey = keyFactory.generateSecret(dks);  
                Cipher cipher = Cipher.getInstance(ALGORITHM_DES);  
                IvParameterSpec iv = new IvParameterSpec("12345678".getBytes());  
                AlgorithmParameterSpec paramSpec = iv;  
                cipher.init(Cipher.ENCRYPT_MODE,secretKey,paramSpec);  
                byte[] bytes = cipher.doFinal(data.getBytes());  
                return byte2String(bytes);  
            } catch (Exception e) {  
                e.printStackTrace();  
                return data;  
            }  
        }  
      
        /** 
         * DES算法,解密 
         *  
         * @param data 
         *            待解密字符串 
         * @param key 
         *            解密私钥,长度不能够小于8位 
         * @return 解密后的字节数组 
         * @throws Exception 
         *             异常 
         */  
        public static String decode(String key,String data) {  
            if (data == null)  
                return null;  
            try {  
                DESKeySpec dks = new DESKeySpec(key.getBytes());  
                SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");  
                // key的长度不能够小于8位字节  
                Key secretKey = keyFactory.generateSecret(dks);  
                Cipher cipher = Cipher.getInstance(ALGORITHM_DES);  
                IvParameterSpec iv = new IvParameterSpec("12345678".getBytes());  
                AlgorithmParameterSpec paramSpec = iv;  
                cipher.init(Cipher.DECRYPT_MODE,paramSpec);  
                return new String(cipher.doFinal(byte2hex(data.getBytes())));  
            } catch (Exception e) {  
                e.printStackTrace();  
                return data;  
            }  
        }  
      
        /** 
         * 二行制转字符串 
         *  
         * @param b 
         * @return 
         */  
        private static String byte2String(byte[] b) {  
            StringBuilder hs = new StringBuilder();  
            String stmp;  
            for (int n = 0; b != null && n < b.length; n++) {  
                stmp = Integer.toHexString(b[n] & 0XFF);  
                if (stmp.length() == 1)  
                    hs.append('0');  
                hs.append(stmp);  
            }  
            return hs.toString().toUpperCase(Locale.CHINA);  
        }  
      
        /** 
         * 二进制转化成16进制 
         *  
         * @param b 
         * @return 
         */  
        private static byte[] byte2hex(byte[] b) {  
            if ((b.length % 2) != 0)  
                throw new IllegalArgumentException();  
            byte[] b2 = new byte[b.length / 2];  
            for (int n = 0; n < b.length; n += 2) {  
                String item = new String(b,n,2);  
                b2[n / 2] = (byte) Integer.parseInt(item,16);  
            }  
            return b2;  
        }  
      
    }  

如果大家只是想用,就可以不用往下看了,下面开始说一些关于DES算法的细节。 ? ? 这种模式的特点是: ? ??

以上内容由PHP站长网【52php.cn】收集整理供大家参考研究

如果以上内容对您有帮助,欢迎收藏、点赞、推荐、分享。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读