如何解决AES加密在不同jdk版本,openjdk和sunjdk中加密结果不同的问题 50C

在AES加密的时候服务器使用的是openjdk,然后程序跑的时候就会出错,同一个加密内容,同一个key,每次加密后的结果都不同,并且解密的时候会报错invalid pad value

1个回答

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
OpenJDK 和 SunJDK
服务器是OpenJDKrn[root@ip-97-74-193-214 bin]# java -versionrnjava version "1.6.0"rnOpenJDK Runtime Environment (build 1.6.0-b09)rnOpenJDK Server VM (build 1.6.0-b09, mixed mode)rnrn本地市Windows7 用的是Java JDK1.6, 但是编译后传到服务器上,提示:rnjava.lang.UnsupportedClassVersionError: Bad version number in .class filern at java.lang.ClassLoader.defineClass1(Native Method)rn at java.lang.ClassLoader.defineClass(ClassLoader.java:620)rn at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:124)rn at org.apache.catalina.loader.WebappClassLoader.findClassInternal(WebappClassLoader.java:1876)rnrnrn---------------rn是版本不兼容吗? 一定要用OpenJDK重新编译下才行吗?
C# AES 加密结果与 iOS Objective-C不同的问题
双方都用AES加解密rnrnMode:ECBrnPadding:PKCS7rnKeySize:128rnrn两边得出的结果始终不一样,有向量没向量都测试过了,网上也搜索出确实是有此类问题,但始终没找到好的解决方法,所以上CSDN求经验
加密结果不同,解密结果相同的AES加密类
C# .Net 2005 AES加密类,通过在需要加密的字符串前后各加特定长度的系统当前时间值来达到对同一个字符串每次加密结果都不一样的目的。解密时忽略添加的的字符从而得到原来的字符串。支持128位、196位和256位加密;支持自定义密钥;支持分组大小;
OpenJDK和sunjdk的选择
最近因为要学习weka就在ubuntu下装了下,发现系统自带有jdk环境,openjdk,查了一些资料说openjdk open得不够全面,正纠结要不要把系统默认jdk环境换成sun jdk==[img=https://forum.csdn.net/PointForum/ui/scripts/csdn/Plugin/001/face/34.gif][/img]rnPS:rn主要需要写写javascript,学习学习weka,node.js,jquery相关 给个建议吧,要不要换成sunjdk呢?
怎么看自己的jdk是sunjdk还是openjdk?
openjdk说是完全开源,具体表现在什么地方?原来的jdk不是有一个src的吗,里面不都是源代码嘛。
不同操作系统不同jdk版本下的时间函数问题
之前一直在windows下用jdk1.4来做jsp开发,现在移植到linux、jdk1.5下,出现一个时间函数问题:rnrn我是这样来取得当前日期、时间的:rnjava.util.Date date=new java.util.Date();rnString time=date.toLocaleString();rnrn在windows下的jdk1.4显示方式,如:2005-05-05 21:20 .... 等等,但到了liunx下的jdk1.5则变成了另外一种形式,英文和数字混合的。rnrn我该如何解决这个问题,尽可能的减少移植过程中的消耗?
deepin解决openjdk和jdk版本不一致问题
    高版本jdk能够兼容低版本jdk,而低版本jdk不能够兼容高版本jdk,例如在jdk9中编写的代码,编译为class文件后,在jdk8中运行会报错(class类版本高低不一致而报错)。    查询openjdk版本,dpkg -l | grep openjdk    方法一:卸载openjdk8,sudo apt-get remove openjdk-8-jdk    安装openjdk9...
c# AES加密与java的不同;
[code=csharp]rnrn string param = "\"idcard\":\"332529196209241717\",\"mobile\":\"13520507685\",\"name\":\"吴神木\"";rn string key="1833ad3ad741456db435163fc5de7e76"rnpublic static string AesEncrypt(string encryptStr, string key)rn rn Byte[] keyArray = UTF8Encoding.UTF8.GetBytes(key);rn byte[] toEncryptArray = UTF8Encoding.UTF8.GetBytes(encryptStr);rnrn RijndaelManaged rDel = new RijndaelManaged();rn rDel.Key = keyArray;rn rDel.Mode = CipherMode.ECB;rn rDel.Padding = PaddingMode.Zeros;rnrn ICryptoTransform cTransform = rDel.CreateEncryptor();rn byte[] resultArray = cTransform.TransformFinalBlock(toEncryptArray, 0, toEncryptArray.Length);rnrn //return Convert.ToBase64String(resultArray, 0, resultArray.Length);rn return ByteArrayToHexString(resultArray);rn [/code]rnjava进行aes加密后的结果为:rnAD15C6505362F5E88F92AE89854328CC097790DA1B7DD0361197A9039326239AC73E05605130A696BF99F8544B8BF8680681A29CA3E992D4122BF3ACAE51FC88BAA010AC2B5F07748637792A50D97CEErn但是用C#加密后为:rn3A53B8D4FC6667602A9F4C38B047668F5CDEE2A4F65B2E34E05ACF3D99FCA5965562FB12FA9F559C2428C840E7B094A7248AA533222F19A264586ABEA531CCE5D04D0CD8BA30D17545F056300A5A3B4Brnjava加密代码如下:rn[code=java]rn public static String encode(String key, String data) rn try rn SecretKey secretKey = new SecretKeySpec(hex2bin(key), "AES");rn Cipher cipher = Cipher.getInstance("AES");rn cipher.init(Cipher.ENCRYPT_MODE, secretKey);rn byte[] bytes = cipher.doFinal(data.getBytes());rn return bin2hex(bytes);rn catch (Exception e) rn e.printStackTrace();rn return null;rn rn rn/**rn * 将2进制转换成16进制rn * rn * @param binrn * 2进制数组rn * @return 16进制字符串rn */rn private static String bin2hex(byte[] bin) throws Exception rn StringBuffer buf = new StringBuffer();rn for (int i = 0; i < bin.length; i++) rn String hex = Integer.toHexString(bin[i] & 0xFF);rn if (hex.length() == 1) rn hex = '0' + hex;rn rn buf.append(hex.toUpperCase());rn rn return buf.toString();rn rnrn /**rn * 将16进制转换为2进制rn * rn * @param hexrn * 16进制字符串rn * @return 2进制数组rn */rn private static byte[] hex2bin(String hex) throws Exception rn if (hex.length() < 1)rn return null;rn byte[] result = new byte[hex.length() / 2];rn for (int i = 0; i < hex.length() / 2; i++) rn int high = Integer.parseInt(hex.substring(i * 2, i * 2 + 1), 16);rn int low = Integer.parseInt(hex.substring(i * 2 + 1, i * 2 + 2), 16);rn result[i] = (byte) (high * 16 + low);rn rn return result;rn rn[/code]rn
jdk版本不同
今天新建了一个基于jdk6的工程,在tomcat中部署之后,运行抛异常:java.lang.UnsupportedClassVersionError: Bad version number in .class file (注:jdk5中,实现接口方法不能用@Override ,只有重写抽象方法可以用,所以系统属性中的jdk不能设为6.0或1.6) 造成这种过错的原由是支撑Tom...
不同jdk版本的兼容问题?
我有一个现成的package 支持jdk1.01,但是其中用到了sun.*的一些内部class。尤其是一些。在jdk1.3中已经是abstract class.现在我是用jdk1.3.请问有解决办法吗?rn
OpenJDK和Sun标准JDK导入证书的不同
[b]最近在开发一个项目,需要导入一个网站的证书到JDK。rn本地用的是sun的标准JDK 1.8,导入证书到JDK后没问题,可以访问该网站。rn但是把代码上传到jenkins服务器跑测试的时候出bug了,服务器那边用的是OpenJDK 8。rnbug如下:[/b]rn16:51:47 burp:javax.net.ssl.SSLException: java.lang.RuntimeException: Unexpected error: java.security.InvalidAlgorithmParameterException: the trustAnchors parameter must be non-emptyrn16:51:47 burp:at sun.security.ssl.Alerts.getSSLException(Alerts.java:208)rn16:51:47 burp:at sun.security.ssl.SSLSocketImpl.fatal(SSLSocketImpl.java:1949)rn16:51:47 burp:at sun.security.ssl.SSLSocketImpl.fatal(SSLSocketImpl.java:1906)rn16:51:47 burp:at sun.security.ssl.SSLSocketImpl.handleException(SSLSocketImpl.java:1889)rn16:51:47 burp:at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1410)rn16:51:47 burp:at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1387)rn16:51:47 burp:at org.apache.http.conn.ssl.SSLConnectionSocketFactory.createLayeredSocket(SSLConnectionSocketFactory.java:394)rn16:51:47 burp:at org.apache.http.conn.ssl.SSLConnectionSocketFactory.connectSocket(SSLConnectionSocketFactory.java:353)rn16:51:47 burp:at org.apache.http.impl.conn.DefaultHttpClientConnectionOperator.connect(DefaultHttpClientConnectionOperator.java:141)rn16:51:47 burp:at org.apache.http.impl.conn.PoolingHttpClientConnectionManager.connect(PoolingHttpClientConnectionManager.java:353)rn16:51:47 burp:at org.apache.http.impl.execchain.MainClientExec.establishRoute(MainClientExec.java:380)rn16:51:47 burp:at org.apache.http.impl.execchain.MainClientExec.execute(MainClientExec.java:236)rn16:51:47 burp:at org.apache.http.impl.execchain.ProtocolExec.execute(ProtocolExec.java:184)rn16:51:47 burp:at org.apache.http.impl.execchain.RetryExec.execute(RetryExec.java:88)rn16:51:47 burp:at org.apache.http.impl.execchain.RedirectExec.execute(RedirectExec.java:110)rn16:51:47 burp:at org.apache.http.impl.client.InternalHttpClient.doExecute(InternalHttpClient.java:184)rn16:51:47 burp:at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:82)rn16:51:47 burp:at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:107)rn16:51:47 burp:at com.sap.sme.sec.dynamic.simulator.SamlLoginHandlerImpl.login(SamlLoginHandlerImpl.java:66)rn16:51:47 burp:at com.sap.sme.sec.dynamic.scanner.LoginManager.LoginSystemInternal(LoginManager.java:46)rn16:51:47 burp:at burp.BurpExtender.setCommandLineArgs(BurpExtender.java:109)rn16:51:47 burp:at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)rn16:51:47 burp:at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)rn16:51:47 burp:at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)rn16:51:47 burp:at java.lang.reflect.Method.invoke(Method.java:498)rn16:51:47 burp:at burp.l0g.run(Unknown Source)rn16:51:47 burp:at java.lang.Thread.run(Thread.java:745)'rnrn查看了OpenJDK的证书链,根证书也都在。。。不知道为啥会这样。。
ASP.NET和c#中md5加密结果不同的问题
问题同题目,如果解决,我在c#中16和32两种方法都试了,都不同
不同的版本的jdk怎么解决它?
大家好,有个困扰了很久的问题,希望能解决。。。。rn我在学校的电脑里做的项目(KMS),把它导入到自己的电脑里的eclipse有多处报错,但是能运行。rn可能是那个jdk的版本问题吧?rn学校的电脑是1.5版本饿,我自己的电脑是1.6版本的。rn这个要怎么解决啊,我想要个聪明的解决办法。。。。。。rn很着急的,望大家给给力,帮帮忙。。。。。。。rn先谢啦。。。。。。rn
Android中DES加密结果与java平台上不同如何解决
如题。。。android中用DES加密后的结果与java平台中的结果不同,如何统一。。。
Md5加密中 C#和Java得到的加密结果不同
C#:rnbyte[] hash;rnbyte[] inputPasswordBytes = System.Text.UnicodeEncoding.Unicode.GetBytes(s);rnMD5CryptoServiceProvider md5 = new MD5CryptoServiceProvider();rn hash = md5.ComputeHash(inputPasswordBytes);rnrnJava:rnrn byte[] hash;rn byte[] inputPasswordBytes = s.getBytes();rn MessageDigest digest;rn try rn digest = java.security.MessageDigest.getInstance("MD5");rn rn digest.update(inputPasswordBytes);rn hash = digest.digest();rnrn同样是 MD5加密 为什么得出的结果不同?rn例如密码为123456rnC#结果:ce0bfd15-059b-68d6-7688-884d7a3d3e8c(横杠是后面加上去的,便于阅读)rnJava结果:E10ADC39-49BA-59AB-BE56-E057F20F883Ernrn我想知道如果想要Java的结果与C#的结果相同,应该怎样修改?rn
aes加密,c++源码,java源码,加密结果一致
所提供的压缩包中,支持c++ aes加密解密,base64处理,java加密解密,c++加密结果和java加密结果相同。加密源码,相关测试代码俱全。
下载不同jdk版本的地址
http://www.yayihouse.com/yayishuwu/chapter/1211
有关jdk版本的不同特性。
请问jdk1.4在性能上跟1.3有什么大的区别么?在tomcat4下会有什么不同的表现么?rn谢谢各位大虾了~~~
Linux根据不同用户如何设置不同JDK版本
遇到一个环境需要安装JDK,一般都安装一个所需版本的JDK(1.7xx)然后配置一下/etc/profile文件的环境变量。这个配置是全用户的。任意用户登录,输入java –version得到的是同一个JDK版本。 有时会遇到这么一个场景,用户A需要搭建服务A,稳定运行需JDK 1.7xx;用户B需要搭建服务B,稳定运行需JDK1.8xx版本。 如果遇到这个情况,可以有两种方法解决。 一、配
C#与PHP中SHA1加密结果不同解决方法
那天在调试API的时候,发现用c#写的SHA1加密出来的结果和PHP中sha1()出来的不一样,找了半天的原因后来才弄出来在调试微信接口的时候大多的帮助文档都是提供的是PHP的方法,所以在.net中实现的时候会出现很多的问题,最典型的就是token通不过验证现在提供一个结果与Php一样 的SHA1方法public static string Sha1Sign(string data) { ...
mac在terminal中切换不同的jdk版本
终端中输入以下来查看当前jdk版本 java -version 终端中输入以下来查看已安装的jdk版本(V注意大写) /usr/libexec/java_home -V 我的结果如下 接下来是配置环境变量java_home,操作如下 1、touch .bash_profile(创建文件,若已创建可以忽略,在finder-home页中command+shift+.可以显示隐...
不同JDK版本中动态代理的差异
package proxytest; import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; import java.lang.reflect.Proxy; import org.junit.Test; import proxytest.*; public class Proxytest {
关于Android DES加密算法在不同平台加密结果不同的问题的一个解决方法
在Android开发时经常涉及到客户端与服务端的交互,对于一些敏感数据需要进行加密处理。比如登录功能的密码加密,这里介绍DES加密的一些实现代码和注意事项。    (请原谅我匮乏表达能力,如果你看不太懂,可以查看相关链接)    由于不同的开发环境,在进行加密和解密的时候经常出现结果不相同的情况,我遇到的是用Android客户端进行DES加密,然后在服务器端用C#DES方法进行解密,结果。。。
AES 在不同平台下的加密和解密错误
需求是在Android客户端进行AES加密,转16进制字符串,然后通过HTTP发送给JAVA服务器端进行解密。不过,现在发现报BadPaddingException。Debug发现,AES的KEY的生成在Android和JAVA(WINDOWS)上是不同的。各位大大有办法解决吗?小弟在此拜谢了。rn//加密rn public static byte[] encode(byte[] content, String password) rn try rn rn KeyGenerator kgen = KeyGenerator.getInstance(ALGORITHM);rn kgen.init(128,new SecureRandom(password.getBytes()));rn SecretKey secretKey = kgen.generateKey();rn byte[] enCodeFormat = secretKey.getEncoded();rn SecretKeySpec key = new SecretKeySpec(enCodeFormat, ALGORITHM); rn Cipher cipher = Cipher.getInstance(ALGORITHM);rn cipher.init(Cipher.ENCRYPT_MODE, key);rn return cipher.doFinal(content);rn catch (Exception e) rn throw new RuntimeException(e);rn rn rn rn//解密rnrn public static byte[] decrypt(byte[] content, String password) rn try rnrn KeyGenerator kgen = KeyGenerator.getInstance(ALGORITHM); rn kgen.init(128,new SecureRandom(password.getBytes())); rn SecretKey secretKey = kgen.generateKey();rn byte[] enCodeFormat = secretKey.getEncoded(); rn SecretKeySpec key = new SecretKeySpec(enCodeFormat, ALGORITHM); rn Cipher cipher = Cipher.getInstance(ALGORITHM);rn cipher.init(Cipher.DECRYPT_MODE, key);rn byte[] result = cipher.doFinal(content); rn return result;rnrn catch (Exception e) rn throw new RuntimeException(e);rn rn
AES加密不同模式c程序
自己做毕业设计的程序,花了些时间,希望有用啊。
AES LINUX加密结果不一致
AES对称加解密, 相同key加密结果不一致,因为Linux的强随机数而导致,需要在 jvm 加如下启动参数   -Djava.security.egd=file:/dev/./urandom  如下测试类,在Linux  javac Test.java 编译 ,运行 Java Test 每次加密结果不一致。 运行 java -Djava.security.egd=fil
jdk版本不同是否会引起问题?
rn在一个java web项目中,因为做了个别类文件的修改,将修改后的.class文件覆盖到原有的工程里面,会不会因为jdk版本不同而产生问题?
Eclipse编译不同jdk版本文件的问题
我是用jdk1.7开发的,现在要发布到服务器上面,服务器是1.6的。rnrn在eclipse里面我修改了Java Compile里面的jdk版本,然后重新发布编译,传到服务器以后EL表达式不能被识别了,我写的EL表达式全部变成字符串显示在页面上了。rnrn求教怎么解决啊?我的项目在本地是能够跑起来,没有任何错误的!
不同JDK版本ArrayList 容量扩充问题
ArrayList就是动态数组,也是一个对象。创建一个ArrayList对象,该对象存放在堆内存中,且是一个内存连续的内存区域。随着向ArrayList中不断添加元素,其容量也自动增长。自动增长会带来数据向新数组的重新拷贝。 ArrayList的底层是由一个Object[]数组构成的,而这个Object[]数组,默认的长度是10,所以有的文章会说ArrayList长度容量为10。 不同Jd
AES加密 java&c++版本
AES加密 java&c++版本C++版本AES.h:#ifndef __AES_H__ #define __AES_H__ #include <string.h> class AES { public: AES(unsigned char* key); virtual ~AES(); //加密整段文字 void Bm53Cipher(char *input,char
通用AES加密版本
Object-c、C#、Java、Android都通用的版本,通用AES加密版本
使用md5.js加密,为什么不同的字符串,加密结果一样呢?
同题,不复述rnrn附上md5.js原文件下载地地址:rn[md5.js](https://cdn.bootcss.com/blueimp-md5/2.0.0/js/md5.js "")rnrn```rnrnrn rn 登录rn rn rnrnrn rn rn 用户名:rn 密 码:rn rn rn 登录rn rn rnrnrn```
linux 根据用户不同设置不同jdk版本
使用root用户进jdk的安装、其为系统的所有用户的默认jdk配置,当系统的非root设置自己的jdk时则不用默认jdk配置 1、  配置root用户JDK版本jdk1.8.0_181 root用户登录,输入命令: vim /etc/profile 尾部追加1.7xx版本JDK配置: JAVA_HOME=/usr/local/jdk8/jdk1.8.0_181 PATH=$JAVA_H...
JS在不同IE版本中显示不同
function xxxx(remarkId,treamName,teacherName)rn document.view.remarkId.value=remarkId;rn document.view.treamName.value=treamName;rn document.view.teacherName.value=teacherName;rn document.view.submit();rnrn rn在JSP上有这样一个方法,当用户点击一个链接后调用这个方法,显示相应的值,rn在ie6中显示正常,在IE5中无法显示,rn请问该如何解决?rn谢谢!
在不同语言版本中控件大小不同
用Delphi7开发一程序(中文开发环境),现需做成越南言版本,使用INI方式做多语言界面,在越南语环境下运行,发现窗口大小及某些控件大小发生变化。后来直接在越南言环境下装Delphi7打开原码,发现的确窗口大小及某些控件大小与中文版中不一样,不知为何有这种情况,有出现过类似情况的兄弟分析一下原因。rnrn窗口大小变化原因是因为将属性BorderStyle设为bsNone,后将BorderStyle设为 bsSizeable,在窗口FormCreate事件中将BorderStyle := bsNone就可以,但窗口上的Panel控件大小就不知怎么处理才可以。
AES加密AES加密
AES加密 C++开发,封装类,可直接使用
linux DES秘钥生成每次加密结果不同
linux 加密Key的生成
tensorflow版本不同的问题
暂时整理了遇到的由于tensorflow版本不同API更改后导致的一些报错: AttributeError:‘module’ object has no attribute ‘mul’ tf.mul()改成:tf.multiply() AttributeError:‘module’ object has no attribute ‘sub’ tf.sub()改成:tf.subtract() At...
不同jquery插件 版本不同造成的问题
最近在开发中遇到一个问题:我在同一个页面已用了两个jquery插件,但是这两个插件使用的jquery版本不同,所以总是不能同时生效。第一个想法是找一个都可以用的版本,但是我从1.几版本到3.几都试了,返现并不好使(说好的向下兼容性呢)。 于是我想到了或许使用iframe可以实现。 iframe iframe 元素会创建包含另外一个文档的内联框架(即行内框架)。 可以理解为一个页面中的另一个页
JAVA非对称加密不同系统加密结果不一致
最近在做一个项目,需要用到非对称加密,但是出现一个很诡异的情况,本地开发环境是Windows环境,测试环境是Linux环境,出现一个问题, 那就是本地环境与开发环境同一个私钥字符串加密加密同一个信息,得到的加密结果不一样。 经过查询网络得知,这是由于填充的规则不同导致。 原来的加密的部分代码 byte[] keyBytes = Base64.decodeBase64(privateKey);...
相关热词 c#检测非法字符 c#双屏截图 c#中怎么关闭线程 c# 显示服务器上的图片 api嵌入窗口 c# c# 控制网页 c# encrypt c#微信网页版登录 c# login 居中 c# 考试软件