跳转到主内容
极星编程网:以代码为星,赴技术山海!

DES解密,但是key是36字节的,怎么处理?

和 java 端进行对接的,我用 php 解密,key是36字节的,所以没有头绪了。我想着是不是有把这36字节转化成16或者32字节的通用方法?先谢谢大家了。 下面是java的代码片段: PHP 8.5.5 PHP 8.5.5 是 PHP 8.5 分支的维护更新版本。该版本延续了“小步快跑”的迭代逻辑,通过深度错误修复、底层性能微调以及安全加固,旨在为开发者提供一个更健壮、更高效的运行环境。该版本严格遵守语义化版本规范,不包含破坏性变更。 下载
public static String DES_KEY="36位的key";
执行方法:
DesUtil.decrypt(rs.getString(i+1),Global.DES_KEY );
类:
public class DesUtil { private final static String DES = "DES"; private final static String PADDING="DES/ECB/PKCS5Padding"; private final static Log log= LogFactory.getLog(DesUtil.class); public static byte[] encrypt(byte[] src, byte[] key)throws Exception { SecureRandom sr = new SecureRandom(); DESKeySpec dks = new DESKeySpec(key); SecretKeyFactory keyFactory = SecretKeyFactory.getInstance(DES); SecretKey securekey = keyFactory.generateSecret(dks); Cipher cipher = Cipher.getInstance(PADDING); cipher.init(Cipher.ENCRYPT_MODE, securekey, sr); return cipher.doFinal(src); } public static byte[] decrypt(byte[] src, byte[] key)throws Exception { SecureRandom sr = new SecureRandom(); DESKeySpec dks = new DESKeySpec(key); SecretKeyFactory keyFactory = SecretKeyFactory.getInstance(DES); SecretKey securekey = keyFactory.generateSecret(dks); Cipher cipher = Cipher.getInstance(PADDING); cipher.init(Cipher.DECRYPT_MODE, securekey, sr); return cipher.doFinal(src); } public final static String decrypt(String data,String key){ try { return new String(decrypt(Base64.decode(data.getBytes()), key.getBytes())); }catch(Exception e) { log.error("Exception -->DesUtil"); e.printStackTrace(); } return null; } public final static String decrypt(String data,String key, String charset){ try { return new String(decrypt(Base64.decode(data.getBytes()), key.getBytes()), charset); }catch(Exception e) { log.error("Exception -->DesUtil "); e.printStackTrace(); } return null; } public final static String encrypt(String code,String key){ try { return Base64.encodeBytes(encrypt(code.getBytes("utf-8"), key.getBytes())); }catch(Exception e) { log.error("Exception -->DesUtil"); e.printStackTrace(); } return null; } /* public static void main(String[] args) { /** * Convert byte[] string * * @param src * @return */ public static String bytesTo16HexString(byte[] src) { StringBuilder stringBuilder = new StringBuilder(""); if (src == null || src.length <= 0) { return ""; } for (int i = 0; i < src.length; i++) { int v = src[i] & 0xFF; String hv = Integer.toHexString(v); if (hv.length() < 2) { stringBuilder.append(0); } stringBuilder.append(hv); } return stringBuilder.toString(); } }
回复内容: 和java端进行对接的,我用php解密,key是36字节的,所以没有头绪了。我想着是不是有把这36字节转化成16或者32字节的通用方法?先谢谢大家了。 下面是java的代码片段:
public static String DES_KEY="36位的key";
执行方法:
DesUtil.decrypt(rs.getString(i+1),Global.DES_KEY );
类:
public class DesUtil { private final static String DES = "DES"; private final static String PADDING="DES/ECB/PKCS5Padding"; private final static Log log= LogFactory.getLog(DesUtil.class); public static byte[] encrypt(byte[] src, byte[] key)throws Exception { SecureRandom sr = new SecureRandom(); DESKeySpec dks = new DESKeySpec(key); SecretKeyFactory keyFactory = SecretKeyFactory.getInstance(DES); SecretKey securekey = keyFactory.generateSecret(dks); Cipher cipher = Cipher.getInstance(PADDING); cipher.init(Cipher.ENCRYPT_MODE, securekey, sr); return cipher.doFinal(src); } public static byte[] decrypt(byte[] src, byte[] key)throws Exception { SecureRandom sr = new SecureRandom(); DESKeySpec dks = new DESKeySpec(key); SecretKeyFactory keyFactory = SecretKeyFactory.getInstance(DES); SecretKey securekey = keyFactory.generateSecret(dks); Cipher cipher = Cipher.getInstance(PADDING); cipher.init(Cipher.DECRYPT_MODE, securekey, sr); return cipher.doFinal(src); } public final static String decrypt(String data,String key){ try { return new String(decrypt(Base64.decode(data.getBytes()), key.getBytes())); }catch(Exception e) { log.error("Exception -->DesUtil"); e.printStackTrace(); } return null; } public final static String decrypt(String data,String key, String charset){ try { return new String(decrypt(Base64.decode(data.getBytes()), key.getBytes()), charset); }catch(Exception e) { log.error("Exception -->DesUtil "); e.printStackTrace(); } return null; } public final static String encrypt(String code,String key){ try { return Base64.encodeBytes(encrypt(code.getBytes("utf-8"), key.getBytes())); }catch(Exception e) { log.error("Exception -->DesUtil"); e.printStackTrace(); } return null; } /* public static void main(String[] args) { /** * Convert byte[] string * * @param src * @return */ public static String bytesTo16HexString(byte[] src) { StringBuilder stringBuilder = new StringBuilder(""); if (src == null || src.length <= 0) { return ""; } for (int i = 0; i < src.length; i++) { int v = src[i] & 0xFF; String hv = Integer.toHexString(v); if (hv.length() < 2) { stringBuilder.append(0); } stringBuilder.append(hv); } return stringBuilder.toString(); } }
用冗余字符补全到48字节。

相关文章