Java En-/decrypt“;AES/ECB/PKCS5P添加“;在爪哇

Java En-/decrypt“;AES/ECB/PKCS5P添加“;在爪哇,java,php,encryption,aes,Java,Php,Encryption,Aes,谁能告诉我如何解密用这个PHP函数加密的数据(使用Java) PHP代码 我已经尝试了这里的大多数东西,但大多数都没有填充物,即使我添加填充物,它们也不起作用 编辑1: (来自PHP) 输入如下所示: 关键是: M02cnQ51Ji97vwT4 结果是: (Java代码) 公共类Mcrypt{ 私有SecretKeySpec-keyspec; 专用密码; 私有字符串SecretKey=“M02cnQ51Ji97vwT4”; 公共Mcrypt(){ keyspec=newsecretkeyspe

谁能告诉我如何解密用这个PHP函数加密的数据(使用Java)

PHP代码 我已经尝试了这里的大多数东西,但大多数都没有填充物,即使我添加填充物,它们也不起作用

编辑1:

(来自PHP)

输入如下所示:

关键是:

M02cnQ51Ji97vwT4
结果是:

(Java代码)

公共类Mcrypt{
私有SecretKeySpec-keyspec;
专用密码;
私有字符串SecretKey=“M02cnQ51Ji97vwT4”;
公共Mcrypt(){
keyspec=newsecretkeyspec(SecretKey.getBytes(),“AES”);
试一试{
cipher=cipher.getInstance(“AES/ECB/PKCS5Padding”);
}捕获(无算法异常){
e、 printStackTrace();
}捕获(无此填充例外){
e、 printStackTrace();
}
}
公共字符串加密(字符串文本)引发异常{
if(text==null | | text.length()==0)
抛出新异常(“空字符串”);
字节[]加密=空;
试一试{
cipher.init(cipher.ENCRYPT_模式,keyspec);
加密=cipher.doFinal(padString(text).getBytes());
}捕获(例外e){
抛出新异常(“[encrypt]”+e.getMessage());
}
返回Base64.encodeBase64String(加密);
}
公共字节[]解密(字符串代码)引发异常{
if(code==null | | code.length()==0)
抛出新异常(“空字符串”);
字节[]已解密=空;
试一试{
cipher.init(cipher.DECRYPT_模式,keyspec);
decrypted=cipher.doFinal(新Base64().decode(code.getBytes());
}捕获(例外e){
抛出新异常(“[decrypt]”+e.getMessage());
}
返回解密;
}
私有静态字符串挂字符串(字符串源){
char paddingChar='';
int size=16;
int x=source.length()%size;
int paddlength=尺寸-x;
对于(int i=0;i
您正在Java代码中对Base64进行编码和解码,但PHP代码似乎没有执行任何编码/解码。你在Pastebin上发布的内容似乎证实了这一点。如果您想使用字符串而不是字节(字节是现代密码所接受的唯一输入),那么您应该确保(字符)编码在两侧都是正确的。如果你只想使用字节,不要用Java解码二进制-输入已经是字节,而不是文本。

不应该使用
ECB
模式。我知道,但我要发送的东西使用它,我需要它。最初我回答了这个问题,然后我意识到我的答案包含在你的标题中。请把你试过的Java代码贴出来好吗?我不明白为什么
“AES/ECB/PKCS5Padding”
不起作用。还请包括PHP函数的示例输入数据(例如,您的密钥和明文)和示例输出数据(例如,您的密文)。我添加了in-and-OutputHanks,这也有助于理解很多事情
M02cnQ51Ji97vwT4
public class Mcrypt {

private SecretKeySpec keyspec;
private Cipher cipher;

private String SecretKey = "M02cnQ51Ji97vwT4";

public Mcrypt() {
    keyspec = new SecretKeySpec(SecretKey.getBytes(), "AES");
    try {
        cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
    } catch (NoSuchAlgorithmException e) {
        e.printStackTrace();
    } catch (NoSuchPaddingException e) {
        e.printStackTrace();
    }
}

public String encrypt(String text) throws Exception {
    if (text == null || text.length() == 0)
        throw new Exception("Empty string");
    byte[] encrypted = null;
        try {
            cipher.init(Cipher.ENCRYPT_MODE, keyspec );
            encrypted = cipher.doFinal(padString(text).getBytes());
        } catch (Exception e) {
            throw new Exception("[encrypt] " + e.getMessage());
        }
    return Base64.encodeBase64String(encrypted);
}

public byte[] decrypt(String code) throws Exception {
    if (code == null || code.length() == 0)
        throw new Exception("Empty string");
    byte[] decrypted = null;

    try {
        cipher.init(Cipher.DECRYPT_MODE, keyspec );
        decrypted = cipher.doFinal(new Base64().decode(code.getBytes()));
    } catch (Exception e) {
        throw new Exception("[decrypt] " + e.getMessage());
    }
    return decrypted;
}

private static String padString(String source) {
    char paddingChar = ' ';
    int size = 16;
    int x = source.length() % size;
    int padLength = size - x;
    for (int i = 0; i < padLength; i++) {
        source += paddingChar;
    }
    return source;
}
}