我正在从 U2 系统发送加密的测试数据,以查看是否可以处理和利用它来提高安全性。
U2中生成加密测试数据的SUBROUTINE为:
RESULT=''
ALGORITHM="rc2-cbc" ; * 128 bit rc2 algorithm in CBC mode
MYKEY="23232323" ; * HEX - Actual Key
IV= "12121212" ; * HEX - Initialization Vector
DATALOC=1 ; * Data in String
KEYLOC=1 ; * Key in String
ACTION=5 ; * Base64 encode after encryption
KEYACTION=1 ; * KEY_ACTUAL_OPENSSL
SALT='' ; * SALT not used
RESULTLOC=1 ; * Result in String RESULT
OPSTRING = ''
RETURN.CODE=ENCRYPT(ALGORITHM,ACTION,DATASTRING,DATALOC,MYKEY,KEYLOC,KEYACTION,SALT,IV,OPSTRING,RESULTLOC)
RETURN.CODE = OPSTRING
正在生成和加密的数据是:
[RAWDATA] => Array
(
[196346] => 05FOAA
[196347] => 05KI
[196328] => 99FOZZ16S10
)
[ENCRYPTED] => Array
(
[196346] => e0XB/jyE9ZM=
[196347] => iaYoHzxYlmM=
[196328] => BS/YmNtlzI95c9NLpl4JVHLJwI/MO3zJm6FKVqu2tcM=
)
我在 PHP 中使用 openssl_decrypt 使用相同的信息:
$encdata = array_value;
$encryptionMethod = ALGORITHM; //"rc2-cbc"
$encryptionKey = MYKEY;//"23232323"
$options = 0;
$iv = IV; //"12121212"
$decryptedMessage = openssl_decrypt( $encdata, $encryptionMethod, $encryptionKey, $options, $iv );
返回值:bool(false)
我尝试了 $options 的不同组合,并尝试自己加密相同的数据,但得到了不同的结果。
我必须等待 24 小时才能获得包含任何更改的新文件,所以我想尽可能多地掩盖问题。
我已经阅读了文档,我觉得以下可能是问题:
- ACTION=5,我只能从 U2 文档中找到 4 个潜在选项 - 1 - 加密,2 - 加密,Base64 编码,3 - 解密,4 - Base64 解码,然后解密 - 就这么简单是错误的吗?我希望如此,但想涵盖任何其他可能的问题
- $encdata - 我尝试过使用 OPENSSL_RAW_DATA 和 0 ,但我无法分辨,因为 ACTION=5 既不是 Encrypt OR Encrypt & base64 编码
- $encryptionMethod - 我不认为 rc2-cbc 是我服务器上 PHP 中的有效选项,但不能明确地说 - 我建议将其更改为 AES256
- $encryptionKey - 可以是 8 个字符的字符串吗?它是否需要是特定的长度并且需要是二进制的?(文档有冲突的信息)
- $iv - 与上述相同 - 8 个字符和非二进制可以吗?
在我将其发送到隔夜更新之前的任何其他见解将不胜感激。
PHP Fiddle 测试: http: //phpfiddle.org/main/code/ixax-umq3