gpt4 book ai didi

java - PHP openssl_encrypt 脚本来模拟这个 Java 加密函数(下一阶段也是解密)

转载 作者:行者123 更新时间:2023-12-02 09:05:09 26 4
gpt4 key购买 nike

我一直在开发一个与 Java 脚本一起使用的 PHP 脚本,它们都需要使用相同的过程/iv/ key /方法等进行加密和解密,以便双向传递的数据是可翻译的。

我相信我需要使用 opennssl_encrypt 和 openssl_decrypt 并避免使用 mcrypt,我已经完成了大部分工作,但出现了问题,我无法弄清楚出了什么问题。

脚本基本上采用盐(x3)并运行一个循环,直到盐的数量,每次都在输入/循环值后加上后缀。

这是 Java 加密:

VALUE = "myinputvalue"; // test value for string tests
ALGORITHM = "Blowfish";
MODE = "Blowfish/CBC/PKCS5Padding";
IV = "myivmyiv"; //random test value, 8 characters
KEY = "atextstringencryptionkey";
SALT = {"salt1111", "salt2222", "salt3333"};
ITERATIONS = SALT.length;

String encrypt(String value) {
try{
SecretKeySpec secretKeySpec = new SecretKeySpec(KEY.getBytes(), ALGORITHM);
Cipher cipher = Cipher.getInstance(MODE);
cipher.init(Cipher.ENCRYPT_MODE, secretKeySpec, new IvParameterSpec(IV.getBytes()));
String valueToEncode = value;
for(int i = 0; i < ITERATIONS; i++){
valueToEncode = SALT[i] + valueToEncode;
byte[] values = cipher.doFinal(valueToEncode.getBytes());
valueToEncode = Base64.encodeToString(values, Base64.DEFAULT);
Log.i("Encryption " + (i + 1), valueToEncode);
}
return valueToEncode;
}
catch(Exception e){
e.printStackTrace();
return "";
}
}

这是我的 PHP 脚本:

$valueToEncode = "myinputvalue";
$cipher_method = "BF-CBC";
$enc_iv = "myivmyiv";
$options = 0;
$enc_key = "atextstringencryptionkey";
$salts = array('salt1111', 'salt2222', 'salt3333');
$arrayLength = count($salts);
$iterations = array();
$i = 0;
while ($i < $arrayLength) {
$iterations[$i] = strlen($salts[$i]);
$i++;
}


$s = 0;

$valueToEncode = $value;

while ($s < $arrayLength) {

$valueToEncode = $salts[$s] . $valueToEncode;

$valueToEncode = openssl_encrypt($valueToEncode, $cipher_method, $enc_key, $options, $enc_iv);

$s++;
}

$return = $valueToEncode;

这是我所能得到的最接近的结果,它是 100% 的第一个循环,但是当传回时,输出的末尾会出错。如果我遗漏了一些明显的东西,我很抱歉,我对 PHP 很满意,但加密对我来说是新的,我已经搜索和尝试了很多,但结果都是空的。

我尝试过实现base64_decode/base64_encode来尝试更接近Java的实现方式),但是它完全抛弃了它,我希望我所缺少的对于你们聪明的人们来说是简单而明显的。

最佳答案

我发现我遇到的问题是由 Java 在 try 循环内每次迭代结束时创建换行符(\n 值)引起的。

这些\n 值已被删除,现在输出匹配。

仅供引用,我的 PHP 解密是这样的(请原谅我的懒惰循环):

        $s = $arrayLength - 1;

while ($s >= 0) {

$valueToDecode = openssl_decrypt($valueToDecode, $cipher_method, $enc_key, $options, $enc_iv);
$valueToDecode = substr($valueToDecode, $block_size);

$s--;
}

感谢那些提供反馈的人。

关于java - PHP openssl_encrypt 脚本来模拟这个 Java 加密函数(下一阶段也是解密),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59882063/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com