遇到一个问题,很是郁闷,我为了传输安全,在android和平台之间,想用DES加密传输,也就是服务端加密,然后android在解码,但是,试了很多次,问题都是java平台和android能够独立完成加码解码,但是,不能互通,也就是平台加码后的密文,andriod不能解码。最后找到以下的解决方法。

亲测可以用,其中Base64是通用的编码程序,这个直接在网上找一个就可以了,也可以把2进制的数据转换成16进制传输。

import java.security.Key;import java.security.spec.AlgorithmParameterSpec;import javax.crypto.Cipher;import javax.crypto.SecretKeyFactory;import javax.crypto.spec.DESKeySpec;import javax.crypto.spec.IvParameterSpec;/** * 加密工具类 */public class DESUtil {    public static final String ALGORITHM_MODE = "DES";    public static final String ALGORITHM_DES ="DES/CBC/PKCS5Padding";    public static final String ivString = "12345678";    public static final String codeType = "UTF-8";    /**     * DES加密算法     * @param data 原始字符串     * @param pwd 密私钥,长度不能够小于8位     * @return     */    public static String encode(String data,String pwd) {        if (data == null)            return null;        try {            DESKeySpec dks = new DESKeySpec(pwd.getBytes());            SecretKeyFactory keyFactory = SecretKeyFactory.getInstance(ALGORITHM_MODE);            // key的长度不能够小于8位字节            Key secretKey = keyFactory.generateSecret(dks);            Cipher cipher = Cipher.getInstance(ALGORITHM_DES);            IvParameterSpec iv = new IvParameterSpec(ivString.getBytes());            AlgorithmParameterSpec paramSpec = iv;            cipher.init(Cipher.ENCRYPT_MODE, secretKey, paramSpec);            byte[] bytes = cipher.doFinal(data.getBytes(codeType));            return Base64.encode(bytes);        } catch (Exception e) {            e.printStackTrace();            return null;        }    }    /**     * DES 解密算法     * @param data 待加密字符串     * @param pwd 密码     * @return 解密后的字符串     */    public static String decode(String data,String pwd) {        if (data == null)            return null;        try {            DESKeySpec dks = new DESKeySpec(pwd.getBytes());            SecretKeyFactory keyFactory = SecretKeyFactory.getInstance(ALGORITHM_MODE);            // key的长度不能够小于8位字节            Key secretKey = keyFactory.generateSecret(dks);            Cipher cipher = Cipher.getInstance(ALGORITHM_DES);            IvParameterSpec iv = new IvParameterSpec(ivString.getBytes());            AlgorithmParameterSpec paramSpec = iv;            cipher.init(Cipher.DECRYPT_MODE, secretKey, paramSpec);            return new String(cipher.doFinal(Base64.decode(data)),codeType);        } catch (Exception e) {            e.printStackTrace();            return data;        }    }}

更多相关文章

  1. 2019AndroidBAT.字节跳动74道高级面试第二篇
  2. android 字节数据的转换与处理
  3. android string.xml中格式资源字符串
  4. 去除listBView的抖动,判断textView中文本长度是不是超过预定值
  5. android 中使用TextView实现分段显示不同颜色的字符串
  6. android 解析xml字符串
  7. android字符串 优化(一)
  8. Android中base64加密后的字符串带有“\n”导致出错的问题解决
  9. %1$s %1$d Android string (java & Android 格式化字符串)

随机推荐

  1. Android如何在字符串资源文件strings.xml
  2. 2D平面中关于矩阵(Matrix)跟图形变换的讲解
  3. Android自定义View(五)——带扫描线的View
  4. 推演鸿蒙、Android、iOS“三国杀”:谷歌无
  5. Android之“观察者模式”解析及实际应用:"
  6. State 状态模式在 Android(安卓)多弹窗的
  7. 关于android各种双卡手机获取imei,imsi的
  8. 2016年末,Android岗位BAT等大厂面试题知识
  9. Android(安卓)Studio不识别新安装的字体
  10. Android实战项目——音乐播放器 由四大组