Java En-/decrypt“;AES/ECB/PKCS5P添加“;在爪哇
谁能告诉我如何解密用这个PHP函数加密的数据(使用Java) PHP代码 我已经尝试了这里的大多数东西,但大多数都没有填充物,即使我添加填充物,它们也不起作用 编辑1: (来自PHP) 输入如下所示: 关键是: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
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;
}
}