kgen.init(128, secureRandom);这句改了么

解决方案 »

  1.   


    这句也加上了的,  我用的是Centos 64位的系统
      

  2.   

    AES是对称加密,加密/解密的密钥是一个,你解密的时候需要知道密钥,而你贴出来到代码是生成强随机数的代码方法参考一下:
    http://blog.csdn.net/ustcxjt/article/details/7442830
      

  3.   


    我的加解密的密钥都是一样的:12345678加密方法:
            String type = "AES";
            KeyGenerator kgen = KeyGenerator.getInstance(type);
            // 防止linux下 随机生成key
            SecureRandom secureRandom = SecureRandom.getInstance("SHA1PRNG");
            secureRandom.setSeed(password.getBytes());
            kgen.init(128, secureRandom);
            SecretKey secretKey = kgen.generateKey();
            byte[] enCodeFormat = secretKey.getEncoded();
            SecretKeySpec key = new SecretKeySpec(enCodeFormat, type);
            Cipher cipher = Cipher.getInstance(type);// 创建密码器
            byte[] byteContent = content.getBytes("utf-8");
            cipher.init(Cipher.ENCRYPT_MODE, key);// 初始化
            byte[] result = cipher.doFinal(byteContent);
            return result; // 加密解密方法:
                KeyGenerator kgen = KeyGenerator.getInstance(type);
                // 防止linux下 随机生成key
                SecureRandom secureRandom = SecureRandom.getInstance("SHA1PRNG");
                secureRandom.setSeed(password.getBytes());
                kgen.init(128, secureRandom);
                SecretKey secretKey = kgen.generateKey();
                byte[] enCodeFormat = secretKey.getEncoded();
                SecretKeySpec key = new SecretKeySpec(enCodeFormat, type);
                Cipher cipher = Cipher.getInstance(type);// 创建密码器
                cipher.init(Cipher.DECRYPT_MODE, key);// 初始化
                byte[] result = cipher.doFinal(content);
                return result; // 解密
      

  4.   

    初步发现个问题,不知道是不是这个原因,大家帮我分析下:两台机器系统版本一样都是CentOS6.5,只是JDK版本不同,同样的代码在两台机器下面运行结果不同,如:
    jdk1.7.0_60运行代码结果正确
    jdk1.7.0_45运行代码结果错误运行错误的机器:(不知道是不是每次生成的强随机数种子不一样还是怎么回事)  结果是每运行一次加密后,每次结果都不一样运行正确的机器:没有上述情况问题
      

  5.   

     你的key既然是12345678  传进去就是了 不要再生成了  cipher.init(Cipher.DECRYPT_MODE, key);// 初始化     这里key要把12345678转成byte[] 传进去
      

  6.   

    沉了?  难道没人给点准确意见?  jdk不同?