Android C、C++与java端3DES互通
来源:互联网 发布:艾媒咨询知乎 编辑:程序博客网 时间:2024/05/16 08:08
- 为了使C端与java端的3des加解密互通,我们一般使用“DESede/ECB/NoPadding”加密模式;
- 而在我们java端,我们都知道3des的密钥都是24字节的,而C端是16字节,此处为重点:我们java端的密钥组成为16字节密钥 + 其前8个字节组成24字节密钥;
- 请看代码:
private static byte[] fillTo24(byte[] key) { if (null != key && key.length == 16) { return Util.pinJie2(key, Util.subBytes(key, 0, 8)); } return null; }
- 全部代码为:
public class DES3Utils { // 向量 public final static String iv = "12345678"; // 3des加密 public static final String algorithm = "DESede"; // 加密 src为源数据的字节数组 public static byte[] encryptBy3DES(byte[] src, byte[] key) { return init(src, key, true, 0); } // 解密函数 public static byte[] decryptBy3DES(byte[] src, byte[] key) { return init(src, key, false, 0); } /** * @param src 需要加密的文字 * @return 加密后的文字 * @throws Exception 加密失败 */ public static byte[] encryptBy3DESCBC(byte[] src, byte[] key) { byte[] fillTo24 = fillTo24(key); if (null == fillTo24) return null; try { SecretKey deskey = new SecretKeySpec(fillTo24, algorithm); Cipher cipher = Cipher.getInstance("DESede/CBC/PKCS5Padding"); IvParameterSpec ips = new IvParameterSpec(iv.getBytes()); cipher.init(Cipher.ENCRYPT_MODE, deskey, ips); return cipher.doFinal(src); } catch (Exception e) { e.printStackTrace(); } return null; } /** * 3DES解密 * * @param encryptText 加密文本 * @return * @throws Exception */ public static byte[] decryptBy3DESCBC(byte[] encryptText, byte[] key) { byte[] fillTo24 = fillTo24(key); if (null == fillTo24) return null; try { SecretKey deskey = new SecretKeySpec(fillTo24, algorithm); Cipher cipher = Cipher.getInstance("DESede/CBC/PKCS5Padding"); IvParameterSpec ips = new IvParameterSpec(iv.getBytes()); cipher.init(Cipher.DECRYPT_MODE, deskey, ips); return cipher.doFinal(encryptText); } catch (Exception e) { e.printStackTrace(); } return null; } /** * @param src 需要加密的文字 * @return 加密后的文字 * @throws Exception 加密失败 */ public static byte[] encryptBy3DESECB(byte[] src, byte[] key) { return init(src, key, true, 1); } /** * 3DES解密 * * @param encryptText 加密文本 * @return * @throws Exception */ public static byte[] decryptBy3DESECB(byte[] encryptText, byte[] key) { return init(encryptText, key, false, 1); } private static byte[] init(byte[] data, byte[] key, boolean mode, int type) { byte[] fillTo24 = fillTo24(key); if (null == fillTo24) return null; String types = null; try { SecretKey deskey = new SecretKeySpec(fillTo24, algorithm); switch (type) { case 0: types = "DESede"; break; case 1: types = "DESede/ECB/NoPadding"; break; case 2: types = "DESede/ECB/PKCS5Padding"; break; } Cipher cipher = Cipher.getInstance(types); if (mode) cipher.init(Cipher.ENCRYPT_MODE, deskey); else cipher.init(Cipher.DECRYPT_MODE, deskey); return cipher.doFinal(data); } catch (Exception e) { e.printStackTrace(); } return null; } private static byte[] fillTo24(byte[] key) { if (null != key && key.length == 16) { return Util.pinJie2(key, Util.subBytes(key, 0, 8)); } return null; } }
阅读全文
0 0
- Android C、C++与java端3DES互通
- Android 使用OpenSSL进行3DES加密 c与java互通
- C/C++: 3DES-ECB模式加密,可以与C#和Java互通
- Android C、C++与java端RSA互通
- Android C、C++与java端RSA互通
- Android(java)与C#,DES加解密
- Android平台和java平台 DES、3DES、RSA加密解密互通程序及其不能互通的原因
- C#/JAVA/PHP 互通DES加解密算法(ECB模式支持8位)
- Android 3DES加密解密(JAVA和C#)
- Android 3DES加密解密(JAVA和C#)
- Android 3DES加密解密(JAVA和C#)
- Android 与C# DES+Base64加密的互通
- C#与android使用DES加密图片文件互通
- .NET 与 Java DES 加密/解密 互通 方法
- DES CBC模式加密算法php与java互通
- DES与3DES 加解密实例(c++)
- Android平台和java平台 DES加密解密互通程序及其不能互通的原因
- Android平台和java平台 DES加密解密互通程序及其不能互通的原因
- filter_var() 验证邮箱、ip、url的格式 php
- Oracle热备份-联机热备
- Logistic Regression with a Neural Network mindset
- 用openpyxl对比两个表格的数据,并把表格A 和表格B相同的数据填写到表格B
- Java的前期绑定和后期绑定
- Android C、C++与java端3DES互通
- 【C#】身份证识别(二):提取目标区域图像
- java九九乘法表
- Django查询models对象报错:TypeError: __str__ returned non-string (type decimal.Decimal)
- CI框架 insert_batch方法 返回-1,插入的数据不全
- C++学习笔记之MFC改变按钮颜色
- 找工作小结
- Java连接Sql Server 2008的简单数据库应用
- Spring Data Jpa+Hibernate 入门2