java AES 加解密 对应php 模仿时出现问题 请大佬赐教

题目描述:

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~ 这个结果?
求救大佬~~~

阅读 1.3k
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题