我试图加密文本,问题是我在PHP和Java中有两个不同的加密值。
PHP和Java中的预期输出应该是相同的。
如果有任何问题的话,是否有一种方法来实现这一目标并处理这段代码?
以下是加密的结果:
PHP代码:
<?php
$cipher = 'BF-CBC';
$key = 'SECRETKEY';
$iv = "abcdefgh";
$opts = OPENSSL_ZERO_PADDING;
$plaintext = "Text";
if (strlen($plaintext) % 8) {
$plaintext = str_pad($plaintext, strlen($plaintext) + 8 - strlen($plaintext) % 8, "\0");
}
$chiperRaw = openssl_encrypt($plaintext, $cipher, $key, $opts, $iv);
$ciphertext = trim(base64_encode($chiperRaw));
echo($ciphertext);
?>Java代码:
private static final String ALGORITHM = "Blowfish";
private static final String MODE = "Blowfish/CBC/PKCS5Padding";
private static final String IV = "abcdefgh";
private static final String Key = "SECRETKEY";
public static String encrypt(String value) throws NoSuchPaddingException, NoSuchAlgorithmException, InvalidAlgorithmParameterException, InvalidKeyException, IllegalBlockSizeException, BadPaddingException {
SecretKeySpec secretKeySpec = new SecretKeySpec(Key.getBytes(), ALGORITHM);
Cipher cipher = Cipher.getInstance(MODE);
cipher.init(Cipher.ENCRYPT_MODE, secretKeySpec, new IvParameterSpec(IV.getBytes()));
byte[] values = cipher.doFinal(value.getBytes());
return Base64.encodeToString(values, Base64.DEFAULT);
}结果
PHP: 83kZpBbrQT4=
Java: YBSmeMNPSjw=产出应是:
PHP: YBSmeMNPSjw=
Java: YBSmeMNPSjw=发布于 2022-11-09 06:46:51
参考这个bug:https://bugs.php.net/bug.php?id=72362,您可以使用一个无文档的选项https://bugs.php.net/bug.php?id=72362来解决这个问题。
openssl_encrypt("Text","BF-CBC","SECRETKEY",OPENSSL_DONT_ZERO_PAD_KEY,"abcdefgh");否则,您需要手动按住键,使其达到合理的大小。
openssl_encrypt("Text","BF-CBC","SECRETKEYSECRETKEY",0,"abcdefgh");https://stackoverflow.com/questions/74370149
复制相似问题