不同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 个回答bisu的回答

bisubisu售后技术支持SYNNEX

我之前也碰到过类似的问题,当时因为项目比较急,也没有深入研究,就直接采取了第三方Bouncy Castle来解决的这个问题。

IT咨询服务 · 2016-08-10
浏览1952

回答者

bisu
售后技术支持SYNNEX

bisu 最近回答过的问题

回答状态

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