Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/354.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
来自CryptoJS的Java解密_Java_Angularjs_Encryption_Aes - Fatal编程技术网

来自CryptoJS的Java解密

来自CryptoJS的Java解密,java,angularjs,encryption,aes,Java,Angularjs,Encryption,Aes,我正在尝试解密Java大小的一些信息,这些信息以前是用CryptoJS(angualrjs)加密的。 以下是一些代码片段: Angularjs加密 CryptoJS.AES.encrypt(message, "my secret key").toString(); 在Java中解密 package com.mypackage; import java.io.UnsupportedEncodingException; import java.security.Message

我正在尝试解密Java大小的一些信息,这些信息以前是用CryptoJS(angualrjs)加密的。 以下是一些代码片段:

Angularjs加密

CryptoJS.AES.encrypt(message, "my secret key").toString();
在Java中解密

package com.mypackage;

import java.io.UnsupportedEncodingException;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.Arrays;
import java.util.Base64;
 
import javax.crypto.Cipher;
import javax.crypto.spec.SecretKeySpec;

public class AES {
private static SecretKeySpec secretKey;
private static byte[] key;

public static void setKey(String myKey) {
    MessageDigest sha = null;
    try {
        key = myKey.getBytes("UTF-8");
        sha = MessageDigest.getInstance("SHA-1");
        key = sha.digest(key);
        key = Arrays.copyOf(key, 16); 
        secretKey = new SecretKeySpec(key, "AES");
    } 
    catch (NoSuchAlgorithmException e) {
        e.printStackTrace();
    } 
    catch (UnsupportedEncodingException e) {
        e.printStackTrace();
    }
}

public static String decrypt(String strToDecrypt, String secret) {
    try{
        setKey(secret);
        
        Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
        cipher.init(Cipher.DECRYPT_MODE, AES.secretKey);
        return new String(cipher.doFinal(Base64.getDecoder().decode(strToDecrypt)));
    } catch (Exception e) {
        System.out.println("Error while decrypting: " + e.toString());
    }
    return null;
}
}
Key: 1234567890123456 (Both Angular and Java side)

Clear data: this is my text

Chipered data in CryptoJS: U2FsdGVkX18C7J5wy5R5FRjfP5Xghpry3FtuTj5xq+o=

What Java backend receives: U2FsdGVkX18C7J5wy5R5FRjfP5Xghpry3FtuTj5xq+o=
调用java解密方法

@PostMapping("/decryption")
public ResponseEntity<DecryptResponseBean> decryption(@RequestBody DecryptRequestBean data){
    String dataToDecrypt = data.getData();
    String decrypted = AES.decrypt(dataToDecrypt, "my secret key");
    
    DecryptResponseBean responseBean = new DecryptResponseBean(decrypted);
    return ResponseEntity.ok(responseBean);
}
EDIT2:样本数据集

package com.mypackage;

import java.io.UnsupportedEncodingException;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.Arrays;
import java.util.Base64;
 
import javax.crypto.Cipher;
import javax.crypto.spec.SecretKeySpec;

public class AES {
private static SecretKeySpec secretKey;
private static byte[] key;

public static void setKey(String myKey) {
    MessageDigest sha = null;
    try {
        key = myKey.getBytes("UTF-8");
        sha = MessageDigest.getInstance("SHA-1");
        key = sha.digest(key);
        key = Arrays.copyOf(key, 16); 
        secretKey = new SecretKeySpec(key, "AES");
    } 
    catch (NoSuchAlgorithmException e) {
        e.printStackTrace();
    } 
    catch (UnsupportedEncodingException e) {
        e.printStackTrace();
    }
}

public static String decrypt(String strToDecrypt, String secret) {
    try{
        setKey(secret);
        
        Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
        cipher.init(Cipher.DECRYPT_MODE, AES.secretKey);
        return new String(cipher.doFinal(Base64.getDecoder().decode(strToDecrypt)));
    } catch (Exception e) {
        System.out.println("Error while decrypting: " + e.toString());
    }
    return null;
}
}
Key: 1234567890123456 (Both Angular and Java side)

Clear data: this is my text

Chipered data in CryptoJS: U2FsdGVkX18C7J5wy5R5FRjfP5Xghpry3FtuTj5xq+o=

What Java backend receives: U2FsdGVkX18C7J5wy5R5FRjfP5Xghpry3FtuTj5xq+o=

在Stackoverflow上搜索一下,您就可以找到与此相同的解决方案。重要的代码不是我自己写的,而是作者@Codo的答案,所以所有的功劳都归于他

Crypto.JS从密码短语(“密钥”)中导出密钥和初始化向量(iv),因此方法
GenerateKeyAndIV
负责获取密钥和iv

以下代码没有适当的异常处理,仅用于教育目的。

结果:

Java decryption from CryptoJS
decrypted text: this is my text
expected data:  this is my text
代码:


您是否可以包含实际的堆栈跟踪,以便用户可以在提供的代码中看到异常发生的位置和时间!。。。提供一整套样本数据(明文、密钥和密文=加密文本)可能会有所帮助。请编辑您的帖子并添加数据,谢谢。添加了请求的详细信息,谢谢。这解决了问题,似乎我可以正确地从前端到后端加密/解密数据。谢谢!