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

王总,你好,碰到一个问题,由于外部系统一使用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

2同行回答

YuLiminYuLimin资深技术顾问IBM广州
编码时只importjavax.crypto.*java.security.*不要引入SUN JDK特有的com.sun.*之类的就可以比较发好的迁多到IBM JDK上。显示全部

编码时只import

javax.crypto.*

java.security.*

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

收起
互联网服务 · 2016-08-18
浏览1711
bisubisu售后技术支持SYNNEX
我之前也碰到过类似的问题,当时因为项目比较急,也没有深入研究,就直接采取了第三方Bouncy Castle来解决的这个问题。显示全部

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

收起
IT咨询服务 · 2016-08-10
浏览1942

提问者

fm928
技术经理北京东方龙马软件发展有限公司
擅长领域: 中间件服务器应用服务器

问题来自

相关问题

相关资料

相关文章

问题状态

  • 发布时间:2016-08-10
  • 关注会员:4 人
  • 问题浏览:5065
  • 最近回答:2016-08-18
  • X社区推广