如何将此PHP行移植到Java?

如何将此PHP行移植到Java?,java,php,encryption,aes,Java,Php,Encryption,Aes,我对AES加密有问题,客户向我展示了他们用于“解密”的PHP服务器代码。奇怪的是,确切的密码是从S.O.那里获得的(不足为奇)。我发现这一点是因为客户传递给我的代码有完全相同的注释!:) 无论如何,这是一段取自s.O.问题的PHP代码 我正试图用Java做同样的事情,但我不知道这一行到底添加了什么: $key = 'a16byteslongkey!'; $padded_key = $key . str_repeat(chr(0x00), 16); // Argh! (注意//Argh!注释不

我对AES加密有问题,客户向我展示了他们用于“解密”的PHP服务器代码。奇怪的是,确切的密码是从S.O.那里获得的(不足为奇)。我发现这一点是因为客户传递给我的代码有完全相同的注释!:)

无论如何,这是一段取自s.O.问题的PHP代码

我正试图用Java做同样的事情,但我不知道这一行到底添加了什么:

$key = 'a16byteslongkey!';

$padded_key = $key . str_repeat(chr(0x00), 16); // Argh!
(注意//Argh!注释不是我的;)


是否尝试添加chr(0x00)来生成32字节的密钥(因为$key是16?)如果是,我在Java中如何执行相同的操作?

chr(0x00)
应返回ASCII码
0
的字符,我认为在Java中可以用
'\0'
表示。

正如Gareth所述,这将返回ASCII码为0的字符。使用此函数,我们可以创建一个重复字符串的函数:

public static String strRepeat(String toRepeat, int reps){
    //Sanity checks go here!
    StringBuilder sb = new StringBuilder();
    for(int x = 0; x < reps; x++){
        sb.append(toRepeat);
    }
    return sb.toString();
}

@Josh也许我应该澄清一下:chr(0x00)在php中做什么?在php中,字符串是二进制安全的(字符串中的每个“字符”实际上只是一个字节),但Java的
string
实例不是(它们实际上代表字符,而不是字节)。对于二进制加密密钥,您可能不应该使用
String
对象,而应该使用
byte[]
或类似于
Key
类的东西。@另一个代码,谢谢您的说明。原来客户在服务器端做了一件“黑客”的事情,用16个零来完成16个字节的密钥,所以它加了32…在用16个“零”填充固定密钥之后,一切都正常了
String paddedKey = key + strRepeat('\0', 16); // Argh!