/** * 1:ANSI X9.8 Format(不带主账号) 06 * * @param password * @param pinKey * @return * @throws Exception */ public static String pinEncode(String password, byte[] pinKey) throws Exception { int passwordLength = password.length(); String pin_fmt = StringUtils.rightPad("0" + passwordLength + password, 16, "F"); byte[] pinBLOCK = DumpUtils.hexToBytes(pin_fmt); System.out.println("无主帐号pinBlock:" + Dump.getHexDump(pinBLOCK)); byte[] des3Info = DesUtils.tripDesEncrypt(pinBLOCK, pinKey); return DumpUtils.bytesToHex(des3Info); }
/** * 1:ANSI X9.8 Format(带主账号) * * @param password * @param pinKey * @param pan * @return * @throws Exception */ public static String pinEncode(String password, byte[] pinKey, String pan) throws Exception { int passwordLength = password.length(); int panLength = pan.length(); String pin_fmt = StringUtils.rightPad("0" + passwordLength + password, 16, "F"); byte[] pinBLOCK = DumpUtils.hexToBytes(pin_fmt); String pin_str = "0000" + pan.substring(3, 15); System.out.println("pinBlock:" + pin_str); byte[] panByte = DumpUtils.hexToBytes(pin_str); for (int i = 0; i < panByte.length; i++) { pinBLOCK[i] ^= panByte[i]; } System.out.println("有主帐号pinBlock:" + Dump.getHexDump(pinBLOCK)); byte[] des3Info = DesUtils.tripDesEncrypt(pinBLOCK, pinKey); return DumpUtils.bytesToHex(des3Info); }
/** * 银行卡密码加密,先进行与主账号异或后进行3DES加密 * * @param pin 银行卡密码 * @param pan 银行卡号 * @return */ public static String getENPinBlock(String pin, String pan, byte[] pinKey) { String panStr = pan.substring(pan.length() - 12 - 1, pan.length() - 1); byte[] panBlock = new byte[8]; System.arraycopy(CodecUtils.hex2byte(panStr), 0, panBlock, 2, 6); String pinLen = pin.length() + ""; String pinStr = StringUtils.rightPad(pin, 14, 'F'); byte[] pinBlock = new byte[8]; System.arraycopy(CodecUtils.hex2byte(pinLen), 0, pinBlock, 0, 1); System.arraycopy(CodecUtils.hex2byte(pinStr), 0, pinBlock, 1, 7); for (int i = 0; i < panBlock.length; i++) { pinBlock[i] ^= panBlock[i]; } byte[] des3Info = DesUtils.tripDesEncrypt(panBlock, pinKey); return DumpUtils.bytesToHex(des3Info); }