Я работал над сценарием PHP для работы со сценарием Java, им обоим нужно шифровать и дешифровать, используя одну и ту же процедуру / iv / key / method et c, чтобы данные проходили в обоих направлениях является переводимым *
Скрипт в основном берет соли (x3) и запускает al oop до количества солей, каждый раз добавляя суффикс к входному / зацикленному значению.
Это шифрование 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% первый l oop, но затем конец вывода идет не так, когда прошло обратно. Извините, если я упускаю что-то очевидное, у меня все в порядке с PHP, но шифрование для меня ново, я много искал и пытался, и оказался пустым.
Я пытался реализовать base64_decode / base64_encode, чтобы попытаться приблизиться к тому, как Java делает это), но это выкидывает все, и я надеюсь, что то, что мне не хватает, легко и очевидно для вас умные люди.