Как преобразовать этот код Python в Java? - PullRequest
0 голосов
/ 16 октября 2018

Я хочу преобразовать следующий код Python в Java.Этот код кодирует данные кредитной карты, используя хэш-алгоритмы и ключи.Я написал некоторый Java-код, основанный на моем понимании ниже этого.Я думаю, что в основном это о Панмаке.Я не уверен, как сгенерировать его значение для Java.

Код Python:

panmackey   = bytes.fromhex('449E5A196233A43819A028770880E814DC420BFFC428295787302E6285FDD685')

def pandgstsha(track2, pan_mac_key=panmackey):

                h = hmac.HMAC(pan_mac_key, hashes.SHA256(), backend=default_backend())
                h.  (bytes(track2.split('=')[0]+track2.split('=')[1][:4],'UTF-8'))
                return base64.b64encode(h.finalize())

Код Java:

String tokenPan = ccNum + expiryStr;
String panmackey= "?????????????????????";//pan_mac_key from python code
Mac  mac = Mac.getInstance("HmacSHA512");
byte[]  decodedBytes = Base64.decodeBase64(panmackey.getBytes("UTF-16LE"));
SecretKeySpec sk = new SecretKeySpec(decodedBytes, mac.getAlgorithm());
mac.init(sk);
byte[] resultBase64 = Base64.encodeBase64(mac.doFinal(tokenPan.getBytes("ASCII")));
String sB64 = new String(resultBase64, "UTF-8");

Мне нужно выяснить Panmackey, и если2 кода выполняют одну и ту же функцию.

1 Ответ

0 голосов
/ 16 октября 2018

Лучше всего было бы использовать: https://commons.apache.org/proper/commons-codec/apidocs/org/apache/commons/codec/binary/Hex.html

import org.apache.commons.codec.binary.Hex;
...
byte[] panmackey= Hex.decodeHex("Hex string goes here");

В противном случае вам нужно будет реализовать свою собственную функцию конвертации, подобную этой;

public static byte[] hexStringToByteArray(String hex) {
    byte[] decoded = new byte[hex.length() / 2];
    for (int i = 0; i < b.length; i++) {
      int index = i * 2;
      int value = Integer.parseInt(hex.substring(index, index + 2), 16);
      decoded[i] = (byte) value;
    }
    return decoded;
  }
...