Java RESTAPI响应的解密

Java RESTAPI响应的解密,java,encryption,Java,Encryption,要通过RESTAPI解密AES加密字段,我在理解IV(初始化向量)以及如何使用它来解密第一个包含16个字符的块时遇到了一个问题 REST响应JSON中的加密字段(描述表单字段): “说明”:“84d1d37bdb7a3200750573ffbf96191f:0aZdRxsIqSpFtuszNr73na/J9JuMLNB>0J6T2F2FRV0SULMBW4PRBZMMXGNLU4W6CDLB5F1LB8JS\r\nRHW6FYZD5ZL//ZUlozE916wvP+zd+>uUfjpk2Bl9o

要通过RESTAPI解密AES加密字段,我在理解IV(初始化向量)以及如何使用它来解密第一个包含16个字符的块时遇到了一个问题

REST响应JSON中的加密字段(描述表单字段):

“说明”:“84d1d37bdb7a3200750573ffbf96191f:0aZdRxsIqSpFtuszNr73na/J9JuMLNB>0J6T2F2FRV0SULMBW4PRBZMMXGNLU4W6CDLB5F1LB8JS\r\nRHW6FYZD5ZL//ZUlozE916wvP+zd+>uUfjpk2Bl9o2uAu+1BSNOVTP55FBNKJXF9YLRZREVVO\r\nyqOxNI/CeX2dzF/Uc=”

我能认出这个

“0aZdRxsIqSpFtuszNr73na/J9JuMLNB>0J6T2F2FRV0SULMBW4PRBZMMXGNLU4W6CDLB5F1LB8JS>r\nRHW6FYZD5ZL//ZUlozE916wvP+zd+>uUfjpk2Bl9o2uAu+1BSNOAVDTP5M5FBNKJXF9YLREVV>O\r\nIwYQOxNI/CeX2dzF/Uc=”

作为实际描述和

“84d1d37bdb7a3200750573ffbf96191f”

与我在这篇文章中的问题有某种关联

加密方法:AES 128位

密码:1234567890123456

原文:“新事件的新描述

www.google.com

让我们看看最初的部分是否相同,或者它是否因此新事件而更改”

解密输出:“bGOn>22H~KH:38/\u用于新事件

www.google.com

让我们看看最初的部分是否相同,或者它是否因此新事件而更改”

使用的解密:AES/CBC/pkcs5p

如何解密解密输出中混乱的第一个块。换句话说,如何根据IV解释84d1d37bdb7a3200750573ffbf96191f以解密前16个字符? 任何帮助都将不胜感激

下面是Java代码:

import java.io.UnsupportedEncodingException;
import java.security.SecureRandom;

import javax.crypto.Cipher;
import javax.crypto.SecretKey;
import javax.crypto.SecretKeyFactory;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.PBEKeySpec;
import javax.crypto.spec.SecretKeySpec;
import org.apache.commons.codec.binary.Base64;

public class AESDecryption {
private static String key = "1234567890123456";
private static String encryptedStr = "0aZdRxsIqSpFtuszNr73na/J9JuMLNB0J6T2f2FrV0sUlMmbW4prbZMmXGnLU4W6CDlb5F1lb8js\r\nRHw6tfyZd5ZL//ZUlozE916wvP+zd+uUfjpk2Bl9o2uAu+1bsNoAVdtP5m5fbnkjxf9yLRzREVVO\r\nIwYQOxNI/CeX2dzF/Uc=";
private static String padding = "AES/CBC/PKCS5Padding";
private static int iterationCount = 65536;
private static int keyLength = 128;
private static String secretKeyAlg = "PBEWithHmacSHA1AndAES_128";

public static void main(String[] args) throws Exception {
    String finalStrDec = null;
    SecretKeyFactory factory = SecretKeyFactory.getInstance(secretKeyAlg);
    PBEKeySpec spec = new PBEKeySpec(key.toCharArray(), generateSalt(), iterationCount, keyLength);
    SecretKey secretKey = factory.generateSecret(spec);
    SecretKeySpec secretKeySpec = new SecretKeySpec(secretKey.getEncoded(), "AES");

    IvParameterSpec ivSpec = new IvParameterSpec(new byte[16]);
    Cipher cipherDec = Cipher.getInstance(padding);
    cipherDec.init(Cipher.DECRYPT_MODE, secretKeySpec, ivSpec);
    byte[] original = cipherDec.doFinal(Base64.decodeBase64(encryptedStr));
    finalStrDec = new String(original);
    System.out.println(finalStrDec);
}

public static byte[] generateSalt() throws UnsupportedEncodingException {
    SecureRandom random = new SecureRandom();
    byte bytes[] = new byte[20];
    random.nextBytes(bytes);
    String salt = new String(bytes);
    return salt.getBytes("UTF-8");
}
}

你将不得不使用与加密相同的IV进行解密。我看不到你的加密代码。请将您的问题包括在内。加密是在ServiceNow中完成的。我使用RESTAPI从servicenow事件中获取json响应。您在这里看到的数据是来自json的一个特定的键值对。我添加了加密方法:AES 128位。密码:1234567890123456 servicenow使用此密码进行加密