不同JVM应用加密方式不同导致无法解密报文

王总,你好,碰到一个问题,由于外部系统一使用sun-JDK的ASE加密方式,而我们公司was使用IBM-JDK导致我们双方系统无法去解密对应的报文,估计是两种JDK的加解密方式区别比较大导致,这个是在rt.jar中的基础代码,所以挺麻烦,下面是应用代码的片段,麻烦王总帮忙建议一个解决方案,或者怎么...显示全部

王总,你好,碰到一个问题,由于外部系统一使用sun-JDK的ASE加密方式,而我们公司was使用IBM-JDK导致我们双方系统无法去解密对应的报文,估计是两种JDK的加解密方式区别比较大导致,这个是在rt.jar中的基础代码,所以挺麻烦,下面是应用代码的片段,麻烦王总帮忙建议一个解决方案,或者怎么绕过都可以。谢谢。

/**

         * 解密

         *

         * @param content

         *            待解密内容

         * @param key

         *            解密的密钥

         * @return 解密后的报文

         * @throws UnsupportedEncodingException

         */

        public static String linuxDecrypt(String content,  String key) throws NoSuchAlgorithmException,

                        NoSuchPaddingException, InvalidKeyException,

                        IllegalBlockSizeException, BadPaddingException, UnsupportedEncodingException {

                if (content.length() < 1)

                        return null;

                byte[] byteRresult = new byte[content.length() / 2];

                for (int i = 0; i < content.length() / 2; i++) {

                        int high = Integer

                                        .parseInt(content.substring(i * 2, i * 2 + 1), 16);

                        int low = Integer.parseInt(content.substring(i * 2 + 1, i * 2 + 2),

                                        16);

                        byteRresult[i] = (byte) (high * 16 + low);

                }

                KeyGenerator kgen = KeyGenerator.getInstance("AES");

                SecureRandom random = SecureRandom.getInstance("SHA1PRNG");

                random.setSeed(key.getBytes());

                kgen.init(128, random);

                SecretKey secretKey = kgen.generateKey();

                byte[] enCodeFormat = secretKey.getEncoded();

                SecretKeySpec secretKeySpec = new SecretKeySpec(enCodeFormat, "AES");

                Cipher cipher = Cipher.getInstance("AES");

                cipher.init(Cipher.DECRYPT_MODE, secretKeySpec);

                byte[] result = cipher.doFinal(byteRresult);

                return new String(result);

        }

收起
参与6

查看其它 1 个回答YuLimin的回答

YuLiminYuLimin资深技术顾问IBM广州

编码时只import

javax.crypto.*

java.security.*

不要引入SUN JDK特有的com.sun.*之类的就可以比较发好的迁多到IBM JDK上。

互联网服务 · 2016-08-18
浏览1725

回答者

YuLimin
资深技术顾问IBM广州
擅长领域: 中间件服务器应用服务器

YuLimin 最近回答过的问题

回答状态

  • 发布时间:2016-08-18
  • 关注会员:4 人
  • 回答浏览:1725
  • X社区推广