php-java之间加密传输--openssl_encrypt--AES-256-ECB

------------------绝大多数加密方式都是在二进制的基础上进行加解密的!!!!!!!!!!!!

------------------AES-256-ECB 设置项 0返回的是base64编码!!!!!!!!!!!!

------------------AES-256-ECB 设置项 其它项返回的是二进制编码!!!!!!!

-----------------AES-256-ECB 设置项 最好别用0,避免编码出错!!!!!

我方使用php语言,对方使用java,加解密模式为AES-256-ECB

php 自带加密函数

$dataJson //待加密json字符串

$cipher //加密方式  ECB模式接受 'AES-128/192/256-ECB'中间数字代表密钥(位)16/24/32字节 也就是密钥长度*8  128长度16*8 一个英文字母占1字节,1字节(byte)=8位(b) ,

$aesKey //密钥,php中密钥(位)通常和加密方式(位)相同,如果密钥(位)大于加密方式(位),如果密钥(位)大于加密方式(位)则只会取加密方式(位)相同,密钥32字节(256位),加密方式128,只会取前16字节作为加密密钥,密钥(位)少于加密方式(位)会报错,

$option //补码方式   注意 0和1的区别

  • 0                //pkcs7/5补码 返回的是base64编码,
  • OPENSSL_RAW_DATA=1 //pkcs7/5补码 返回的是二进制编码,
  • OPENSSL_ZERO_PADDING=2  //pkcs0补码  返回的是二进制编码
  • OPENSSL_NO_PADDING=3   //不填充补码  返回的是二进制编码

// 加密业务数据
$encryptedData = openssl_encrypt($dataJson, $cipher, $aesKey, $option);

========注意要点==================

php通过此加密方式传输数据,需要与对方确定的是:

1.加密方式,

2.密文编码方式 (base64,2进制,16进制)

--------------不管什么方式最原始的加解密数据一定要是二进制!!!!!!!!------------------

3.补码方式,如果补码方式不是该函数自带的需要另外手动补码--自己查资料

==============问题描述=====================

通常对接java接口对方一般也就是base64编码,也就是openssl_encrypt($dataJson, $cipher, $aesKey, 0); 或者 base64_encode(openssl_encrypt($dataJson, $cipher, $aesKey, OPENSSL_RAW_DATA)),-----也就是 直接转base64和先二进制再转base64的区别

1.密钥问题:5ef5689475bdfca33fb92d7b3a8657cfd287de9a895d8f534cba9ad46115f279---64字节??比最大的32位还长,,为什么呢,,(后来询问才知道对方是用的16进制,需要先把密钥转byte[]32(32字节),)密钥是16进制需要先把密钥用---hex2bin---转为二进制,一个16进制数代表4个二进制也就是4位,所以16进制转二进制之后字节减半;

2.加解密过程的转码问题,对方要求的密文是 加密后转16进制---用此函数bin2hex---,起初我用的是bin2hex(openssl_encrypt($dataJson, $cipher, $aesKey, 0)),怎么解密都不对,最后用bin2hex(openssl_encrypt($dataJson, $cipher, $aesKey, OPENSSL_RAW_DATA))成功了,,原因在于,绝大多数加密方式都是再二进制编码的基础上进行加解密的, 0的时候返回的是base64编码的数据,所以对方得到之后解密永远是失败的,而OPENSSL_RAW_DATA返回的是二进制编码 所以成功了

  • 20
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值