如何在PHP中实现AES 128 ECB?
我有一个简单的AES加密的Java代码片段,我想将其转换为PHP,但是我用PHP代码得到的输出与Java输出不匹配。 下面是Java和PHP中的代码以及联机执行的链接 JAVA代码: (IDE:) 等效的PHP代码(需要更正): (IDE:)如何在PHP中实现AES 128 ECB?,php,aes,php-openssl,Php,Aes,Php Openssl,我有一个简单的AES加密的Java代码片段,我想将其转换为PHP,但是我用PHP代码得到的输出与Java输出不匹配。 下面是Java和PHP中的代码以及联机执行的链接 JAVA代码: (IDE:) 等效的PHP代码(需要更正): (IDE:) 查看的文档,特别是第4个参数($options)的说明。如果未设置OPENSSL\u RAW\u DATA标志,结果将返回Base64编码,即在当前PHP代码中,它被Base64编码了两次。@Topaco非常感谢,现在看来这是一个愚蠢的错误,我们已经花了
查看的文档,特别是第4个参数($options
)的说明。如果未设置OPENSSL\u RAW\u DATA
标志,结果将返回Base64编码,即在当前PHP代码中,它被Base64编码了两次。@Topaco非常感谢,现在看来这是一个愚蠢的错误,我们已经花了很多时间调试它。:)将第四个参数设置为1
解决了该问题。
import java.io.UnsupportedEncodingException;
import java.nio.charset.Charset;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.*;
import javax.crypto.Cipher;
import javax.crypto.spec.SecretKeySpec;
public class Main
{
public static SecretKeySpec getkey(String str) {
try {
return new SecretKeySpec(Arrays.copyOf(MessageDigest.getInstance("SHA-1").digest(str.getBytes("UTF-8")), 16), "AES");
} catch (NoSuchAlgorithmException e) {
} catch (UnsupportedEncodingException e2) {
}
return null;
}
public static String encrypt(String str) {
byte[] bArr;
try {
SecretKeySpec key = getkey("password");
Cipher instance = Cipher.getInstance("AES");
instance.init(1, key);
bArr = instance.doFinal(str.getBytes("UTF-8"));
} catch (Exception e) {
bArr = null;
}
return Base64.getEncoder().encodeToString(bArr);
}
public static void main(String[] args) {
String data = "hello";
String encryptedData = encrypt(data);
System.out.println(encryptedData);
}
}
<?php
function encrypt($data, $key) {
$encrypted = openssl_encrypt($data, "aes-128-ecb", $key, 0,);
return base64_encode($encrypted);
}
$keyHex16 = substr(sha1('password'), 0, 32);
$key = hex2bin($keyHex16);
$data= 'hello';
$enc = encrypt($data, $key);
echo $enc;
?>