android和java平台统一的DES加密解决方案,解决加密不一样的问题
16lz
2021-12-17
遇到一个问题,很是郁闷,我为了传输安全,在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; } }}
更多相关文章
- android 在init。rc中配置socket及其使用
- Android中String资源文件的format方法
- 关于android UDP 客户端与delphi UDP服务端通讯中文乱码问题
- android视频播放器
- Android(安卓)中数据库查询方法 query() 中的 selectionArgs 的
- Android(安卓)中数据库查询方法 query() 中的 selectionArgs 的
- Android(安卓)中将 "base64图片" 解码为".png"图片
- Android(安卓)里面的android_secret_code
- android string.xml中格式资源字符串