题目描述:
java有个加密程序,需要用php的openssl对应写出来。
有java加密程序,但是用php加密出来的结果 不一致
java示例:
private static Key aexKey(String AesKey){
try {
//生成key
KeyGenerator keyGenerator=KeyGenerator.getInstance("AES");
SecureRandom sr=SecureRandom.getInstance("SHA1PRNG");
sr.setSeed(AesKey.getBytes());
keyGenerator.init(keyLength,sr);//设置加密位数
SecretKey secretKey= keyGenerator.generateKey();
byte[] keyBytes=secretKey.getEncoded();
//key转换
Key key=new SecretKeySpec(keyBytes, "AES");
return key;
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
我在倒数第二部 byte[] keyBytes=secretKey.getEncoded(); 这个方法拿到了一个字节数组。
假如key是 1232。
这这一步拿到处理后key的字节数组是 $bytes = [-106, 42, 66, -100, 123, -76, 84, 41, 35, 49, 12, 126, 74, 21, 106, 63, 127, -23, 124, -58, 94, -11, 81, 79, -46, -76, -25, 69, -48, 68, 84, 126]。
然后我到php中用chr()函数转换了。
foreach ($bytes as $ch) {
$key .= chr($ch);
}
// var_dump($key);die;
//这一步key得到 �*B�{�T)#1~Jj?�|�^�QOҴ�E�DT~
//我用这个结果,通过测试,加密出来的结果跟java相同。
$string = '{"a":"1582264259053","b":"0301","c":"010110101","d":"20110101110661","e":"12254X"}';
$data = base64_encode(openssl_encrypt($string, 'AES-256-ECB', $key, OPENSSL_RAW_DATA));
//var_dump($data);die;
//而接下来我用php处理key($key=1232)
$key = substr(openssl_digest(openssl_digest($key, 'sha1', true), 'sha1', true), 0, 16);
//php处理后的key加密数据,得到结果不一样。是不是我用php方法处理的key不对?
//这个方法得到的结果是 �*B�{�T)#1~Jj?
问:怎么通过php处理得到 �*B�{�T)#1~Jj?�|�^�QOҴ�E�DT~ 这个结果?
求救大佬~~~