如何将此Python代码转换为Java?

时间:2018-10-16 03:00:30

标签: java python base64 hmacsha1

我希望将以下python代码转换为Java。此代码使用哈希算法和密钥对信用卡数据进行编码。根据下面的理解,我已经写了一些Java代码。我认为主要是关于panmackey的。我不确定如何为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以及这两个代码是否具有完全相同的功能。

1 个答案:

答案 0 :(得分:0)

您最好的选择是使用: 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;
  }