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