PHP怎么实现JAVA这种的字符串解析,求指点
问题:对接第三方SDK因为没有PHP版本,怎么把这个java代码用php的方式去实现解析的方法,有什么解决办法吗,或者相关文档
1. JAVA代码
package com.example.utils;
import javax.crypto.Cipher;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;
import java.security.Key;
/**
* @program: 聊天室解密
* @description: Aes工具类
* @author: test
* @create: 2022年9月19日18:32:51
**/
public class AesUtil {
private static final String ALGORITHM = "AES";
private static final String AES_CBC_PADDING = "AES/CBC/PKCS5Padding";//AES/CBC/PKCS7Padding
/**
* Aes加密(ECB工作模式)
*
* @param key 密钥,key长度必须大于等于 3*8 = 24,并且是8的倍数
* @param keyIv 初始化向量,keyIv长度必须等于16
* @param data 密文
* @return 明文
* @throws Exception
*/
public static byte[] decodeByCBC(byte[] key, byte[] keyIv, byte[] data)
throws Exception {
//获取SecretKey对象,也可以使用getSecretKey()方法
Key secretKey = new SecretKeySpec(key, ALGORITHM);
//获取指定转换的密码对象Cipher(参数:算法/工作模式/填充模式)
Cipher cipher = Cipher.getInstance(AES_CBC_PADDING);
//创建向量参数规范也就是初始化向量
IvParameterSpec ips = new IvParameterSpec(keyIv);
//用密钥和一组算法参数规范初始化此Cipher对象(加密模式)
cipher.init(Cipher.DECRYPT_MODE, secretKey, ips);
//执行加密操作
return cipher.doFinal(data);
}
/**
* 将16进制转换为二进制
* @param hexStr
* @return 转换后的结果
*/
public static byte[] parseHexStr2Byte(String hexStr) {
if (hexStr.length() < 1)
return null;
byte[] result = new byte[hexStr.length()/2];
for (int i = 0;i< hexStr.length()/2; i++) {
int high = Integer.parseInt(hexStr.substring(i*2, i*2+1), 16);
int low = Integer.parseInt(hexStr.substring(i*2+1, i*2+2), 16);
result[i] = (byte) (high * 16 + low);
}
return result;
}
}
解析的函数
/**
* @program: 解密接口返回data
* @description: 示例方法
* @param data
* @param sKey
* @param data 密文
**/
private static String Decrypt(byte[] data, byte[] sKey) {
try {
byte[] decodeStr = AesUtil.decodeByCBC(sKey,sKey, data);
String finalText = cn.hutool.core.codec.Base64.decodeStr(new String(decodeStr, StandardCharsets.UTF_8));
return finalText;
} catch (Exception ex) {
System.out.println(ex.toString());
return null;
}
}
php用openssl的AES/CBC/PKCS5Padding解析和加密就行
直接用java不就好了,何必拘泥于语言
我以前的做法是,打了个jar包运行起来,通过http协议,调用java程序加解密。 关键是给我加解密的人,不是写加解密算法的人。