gpt4 book ai didi

java - IBM 3624 引脚偏移生成

转载 作者:搜寻专家 更新时间:2023-11-01 02:43:57 26 4
gpt4 key购买 nike

我正在使用 IBM 3624 算法进行引脚生成,然后从中进行偏移。这是来自 IBM Website 的算法:

我不确定顺序,必须使用输入数据。例如,该算法需要验证数据(起始位置、长度、PAN Pad 字符和 Pin 长度)、十进制表 (0123456789012345)、Pin、Pan 和 PDK。

编辑:这是输入数据格式 -PAN(帐号或卡号):16 位十六进制字符串。Pin(通常为 4 位,但可根据要求更改):4 位数字(十六进制值将从十进制表中替换)PDK(PAN 提供的加密 key ):32 位数字

Start Position & Length : 从 PAN 中选择的数字,最后一位是校验位,将被忽略。 PAN 的这些选定数字随后被填充回 16 位。

填充字符:单个字符(十六进制数字)。

这是我用来执行此操作的代码:

public static void CalculatePINOffset(String PAN, String Pin, String PDKkey, String DecTab, int StartPos, int Length,
char PadChar) throws Exception{
int PANLength = PAN.length();
if(Length != (PANLength - StartPos)){
throw new Exception(
"Invalid 'Start Pos and Length' format.");
}
//Padding the PAN before Start POS with Pad Chars back to 16 digits.
String block = ISOUtil.padleft(PAN.substring(StartPos, Length + (StartPos - 1)), PAN.length(), PadChar);

/*
* Doing encryption stuff on block with PDKKey.
* The execute function basically encrypts block and PDKKey, and any algorithm could do the work.
*/
String result = execute(block , PDKkey, "2TDES");

Map<Character, Character> decTab = new HashMap<Character, Character>();
decTab.put('A', '0');
decTab.put('B', '1');
decTab.put('C', '2');
decTab.put('D', '3');
decTab.put('E', '4');
decTab.put('F', '5');

//Replacing Hex Characters with numbers from Decmalization table.
char[] Inpin = result.substring(0, 4).toCharArray();
for(int i = 0; i < Inpin.length; i++){
if(decTab.containsKey(Inpin[i])){
Inpin[i] = decTab.get(Inpin[i]);
}
}
result = new String(Inpin);
System.out.println("Intermediate PIN: "+result);

//Calculating offset from Intermediate Pin.
int[] Offset = new int[4];
int Cpin;
int Ipin;
for(int i = 0; i < result.length(); i++){
Ipin = Integer.parseInt(result.substring(i, i+1));
Cpin = Integer.parseInt(Pin.substring(i, i+1));

if((Cpin - Ipin) >= 0){
Offset[i] = (Cpin - Ipin);
}
else{
Offset[i] = (Ipin - Cpin)%10;
}
}

String PinOffset = Arrays.toString(Offset);
System.out.println("Pin Offset: " + PinOffset);
}

注意:我不是在寻找代码或实现。我提供这段代码是为了更好地解释使用顺序。所有能帮助我的是正确的加密顺序、验证数据和十进制表的使用。

当使用 BP - Tools 等开源工具进行交叉检查时,生成的偏移量和引脚不匹配。我哪里做错了?

最佳答案

好的,我想通了。如果有人正在寻找同样的东西,这里是这样做的过程:

1. Generate validation data from PAN:
- Get PAN Digits from Start Position to Length, and add Pad characters to the right, until it was 16 digits in length.
2. Encrypt validation data with pdk key using DES, 3DES or AES algorithm. This will generate an encrypted code.
3. Decimalize encrypted code using decimalization table.
4. Convert to Hex String, and get the first n digits (n = pin length). This will generate intermediate Pin.
5. Finally, Modulo Subtract intermediate pin with customer pin. This generates the Offset.

希望这对您有所帮助。- 谢谢!

关于java - IBM 3624 引脚偏移生成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26849323/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com