问题描述
我在linux系统下解密AES失败,上网查了资料说是加上下段代码就能解决://防止linux下随机生成keySecureRandomsecureRandom=SecureRandom.getInstance("SHA1PRNG");secureRandom.setSeed(password.getBytes());但事实是我加上了这行代码,放到几台机器当中去试时发现,还是解密失败,有大侠遇到过吗?
解决方案
解决方案二:
kgen.init(128,secureRandom);这句改了么
解决方案三:
引用1楼yuejingdong的回复:
kgen.init(128,secureRandom);这句改了么
这句也加上了的,我用的是Centos64位的系统
解决方案四:
AES是对称加密,加密/解密的密钥是一个,你解密的时候需要知道密钥,而你贴出来到代码是生成强随机数的代码方法参考一下:http://blog.csdn.net/ustcxjt/article/details/7442830
解决方案五:
引用3楼tianfang的回复:
AES是对称加密,加密/解密的密钥是一个,你解密的时候需要知道密钥,而你贴出来到代码是生成强随机数的代码方法参考一下:http://blog.csdn.net/ustcxjt/article/details/7442830
我的加解密的密钥都是一样的:12345678加密方法:Stringtype="AES";KeyGeneratorkgen=KeyGenerator.getInstance(type);//防止linux下随机生成keySecureRandomsecureRandom=SecureRandom.getInstance("SHA1PRNG");secureRandom.setSeed(password.getBytes());kgen.init(128,secureRandom);SecretKeysecretKey=kgen.generateKey();byte[]enCodeFormat=secretKey.getEncoded();SecretKeySpeckey=newSecretKeySpec(enCodeFormat,type);Ciphercipher=Cipher.getInstance(type);//创建密码器byte[]byteContent=content.getBytes("utf-8");cipher.init(Cipher.ENCRYPT_MODE,key);//初始化byte[]result=cipher.doFinal(byteContent);returnresult;//加密解密方法:KeyGeneratorkgen=KeyGenerator.getInstance(type);//防止linux下随机生成keySecureRandomsecureRandom=SecureRandom.getInstance("SHA1PRNG");secureRandom.setSeed(password.getBytes());kgen.init(128,secureRandom);SecretKeysecretKey=kgen.generateKey();byte[]enCodeFormat=secretKey.getEncoded();SecretKeySpeckey=newSecretKeySpec(enCodeFormat,type);Ciphercipher=Cipher.getInstance(type);//创建密码器cipher.init(Cipher.DECRYPT_MODE,key);//初始化byte[]result=cipher.doFinal(content);returnresult;//解密
解决方案六:
初步发现个问题,不知道是不是这个原因,大家帮我分析下:两台机器系统版本一样都是CentOS6.5,只是JDK版本不同,同样的代码在两台机器下面运行结果不同,如:jdk1.7.0_60运行代码结果正确jdk1.7.0_45运行代码结果错误运行错误的机器:(不知道是不是每次生成的强随机数种子不一样还是怎么回事)结果是每运行一次加密后,每次结果都不一样运行正确的机器:没有上述情况问题
解决方案七:
你的key既然是12345678传进去就是了不要再生成了cipher.init(Cipher.DECRYPT_MODE,key);//初始化这里key要把12345678转成byte[]传进去
解决方案八:
沉了?难道没人给点准确意见?jdk不同?