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

如何将此Python代码转换为Java?,java,python,base64,hmacsha1,Java,Python,Base64,Hmacsha1,我希望将下面的python代码转换成Java。该代码使用哈希算法和密钥对信用卡数据进行编码。根据我在下面的理解,我已经编写了一些Java代码。我想主要是关于潘麦基的。我不知道如何为Java生成它的价值 Python代码: panmackey = bytes.fromhex('449E5A196233A43819A028770880E814DC420BFFC428295787302E6285FDD685') def pandgstsha(track2, pan_mac_key=panmack

我希望将下面的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和这两个代码是否具有完全相同的功能

您的最佳选择是使用:

否则,您必须像这样实现自己的转换函数

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;
  }
公共静态字节[]hexStringToByteArray(字符串十六进制){
字节[]已解码=新字节[hex.length()/2];
for(int i=0;i
它有什么问题?更新了我的问题,现在应该清楚了。对于十六进制字符串“449E5A196233A43819A0287707080E814DC420BFFC428295787302E6285FDD685”,它生成[B@372f7a8d“还有”[B@2f92e0f4'使用您提出的两种解决方案。为什么有两种不同的输出?您能提供帮助吗?这是对象的ID,而不是存储在it中的值。[B表示对象的类型为byte[B@是“ID为xxxxxxxx的字节数组”,所以是的,每个都有自己的ID…因为它们不是同一个对象。如果要将内容打印到控制台,则必须将字节[]转换回字符串。可以使用Hex.encodeHexString(panmackey)为了验证,您所做的只是将十六进制字符串转换为字节数组,然后再转换回与您开始使用的完全相同的十六进制字符串…嗯,不知道为什么它也不会生成与python代码相同的输出。
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;
  }