java-Delphi -ANSI X9.9 MAC 算法,该怎么解决
java-Delphi ---------ANSI X9.9 MAC 算法
功能是实现MAC算法,下面是Java版本的,用到了DES,如果大家有delphi版本的MAC算法,贴上,就不用翻译底下的java版本了,如果没的话,帮忙翻译一下,其中涉及Des部分(红色部分),就不需要翻译了。谢谢
------解决方案--------------------
两块钱?:)
功能是实现MAC算法,下面是Java版本的,用到了DES,如果大家有delphi版本的MAC算法,贴上,就不用翻译底下的java版本了,如果没的话,帮忙翻译一下,其中涉及Des部分(红色部分),就不需要翻译了。谢谢
- Java code
/** * 实现ECB加密,返回16位十六进制MAC码,如果出现异常返回null * * @param input * 明文 * @param key * 密钥十六进制(明文) * @return 8位MAC码 */ public String ecbEncrypt(String input, String key) { byte[] mac = new byte[8]; byte[] temp = new byte[8]; int z = 0; try { byte[] bt = input.getBytes("iso-8859-1"); int len = bt.length; int other = len % 8; // 如果密文最后不足8个字节,则以0补足 if (other != 0) { byte[] tt = bt; bt = new byte[tt.length + (8 - other)]; System.arraycopy(tt, 0, bt, 0, len); } // 初始化mac数组,最明文的前8个字节,用来进行循环异或 for (int i = 0; i < 8; i++) { mac[i] = bt[i]; } // 循环异或 for (int i = 8; i <= bt.length; i++, z++) { if (i != 8 && i % 8 == 0) { for (int j = 0; j < 8; j++) { mac[j] = (byte) (mac[j] ^ temp[j]); } z = 0; temp = new byte[8]; } if (i != bt.length) { temp[z] = bt[i]; } } byte[] tmpResult = new byte[8];// 用来存放异或结果 tmpResult = [color=#FF6600]des(mac, String2Hex(key));[/color] return Hex2String(tmpResult).toUpperCase(); } catch (Exception e) { return null; } }
------解决方案--------------------
两块钱?:)