Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.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
java中的AES256 CBC加密在负载测试期间间歇性失败_Java_Multithreading_Cryptography - Fatal编程技术网

java中的AES256 CBC加密在负载测试期间间歇性失败

java中的AES256 CBC加密在负载测试期间间歇性失败,java,multithreading,cryptography,Java,Multithreading,Cryptography,我正在使用java代码加密输入数据(AES256 CBC)。随附代码FYR。 工作正常,但在对20多个并发用户进行负载测试期间,每50个请求中就有1个会产生意外结果(加密不正确)。 我知道这一点,因为在负载测试中,所有请求的输入都是相同的 我已经尝试在这里使用同步块,但仍然没有成功 public静态字符串getEncryptedValue(字符串myKey,字符串值)引发不支持的编码异常,NoSuchAlgorithmException{ 已同步(值){ //声明 secretKey规范secr

我正在使用java代码加密输入数据(AES256 CBC)。随附代码FYR。 工作正常,但在对20多个并发用户进行负载测试期间,每50个请求中就有1个会产生意外结果(加密不正确)。 我知道这一点,因为在负载测试中,所有请求的输入都是相同的

我已经尝试在这里使用同步块,但仍然没有成功

public静态字符串getEncryptedValue(字符串myKey,字符串值)引发不支持的编码异常,NoSuchAlgorithmException{
已同步(值){
//声明
secretKey规范secretKey;
字节[]键;
字符串encryptedString=“”;
MessageDigest-sha=null;
key=myKey.getBytes(“UTF-8”);
sha=MessageDigest.getInstance(“sha-256”);
key=sha.digest(key);
key=array.copyOf(key,16);//仅使用前128位
secretKey=新的SecretKeySpec(key,“AES”);
试一试{
Cipher Cipher=Cipher.getInstance(“AES/ECB/PKCS5Padding”);
cipher.init(cipher.ENCRYPT_模式,secretKey);
encryptedString=(Base64.encodeBase64String(cipher.doFinal(value.trim().getBytes(“UTF-8”)));
}
捕获(例外e){
System.out.println(“加密时出错:+e.toString());
}
返回Base64.encodeBase64String(encryptedString.getBytes());
}
}

也没有错误消息或stdErr日志。只是一个无效的结果。

如何并发执行此静态方法?如果变量确实是本地变量,则看起来不像并发问题(在显示的代码中,其他地方可能存在问题)。
synchronized
块完全无用,而在
value
上同步也同样无用。@LutzHorn——我从中间件工具(IBM Integration Bus)中将此方法称为允许请求并发的外部过程调用。在给定的代码中,根本不需要同步。这些变量是局部变量,因此根据定义它们是线程安全的。除非您在
getEncryptedValue
之外做了一些奇怪的事情(例如以非线程安全的方式覆盖结果,导致数据损坏),否则这不是并发问题。如果您解码了错误加密的值,您会得到什么(即异常或只是一个乱码值)?另外,为什么要将Base64编码
encryptedString
两次?第二个
getBytes()
中也缺少编码,这是一件坏事(尽管与此问题无关)。