【问题标题】:Issue while sending command to HSM向 HSM 发送命令时出现问题
【发布时间】:2016-07-31 04:58:47
【问题描述】:

我正在尝试使用 python 代码向 HSM (Thales paysheild 9000) 发送命令。但我从代码中得到的响应与预期的不同。

Input: HEADJA12345678912306 #generate random pin of length 6
Ouput: HEADJA12315 

谁能帮我找出问题?理想情况下,响应应该有 JB 而不是我作为输出得到的 JA。

下面是代码。

#!/usr/bin/python
import socket, binascii, string
from struct import *
import time;

TCP_IP = 'localhost'
TCP_PORT = 6511

COMMAND = 'HEADJA12345678912306'

def testPrintable(str):
    return all(c in string.printable for c in str)

def buildCommand(command):
    hCommand = ''
    i = 0
    while True:
        if (command[i:i+1] == '<'):
            i = i + 1
            while True:
                hCommand = hCommand + binascii.a2b_hex(command[i:i+2])
                i = i + 2
                if (command[i:i+1] == '>'):
                    i = i + 1
                    break
        else:
            hCommand = hCommand + command[i]
            i = i + 1
        if (i == len(command)):
            break
    return hCommand

def main():
    global TCP_IP
    global TCP_PORT
    global COMMAND

    connection = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    connection.connect((TCP_IP, TCP_PORT))

    BUFFER_SIZE = 1024

    COMMAND = buildCommand(COMMAND)
    SIZE=pack('>h',len(COMMAND))
    MESSAGE = SIZE + COMMAND
    connection.send(MESSAGE)
    data = connection.recv(BUFFER_SIZE)

    if (testPrintable(MESSAGE[2:])):
        print "sent data (ASCII) :", MESSAGE[2:]
    print "sent data (HEX) :", MESSAGE.encode('hex')
    if (testPrintable(data[2:])):
        print "received data (ASCII):", data[2:]

    print "received data (HEX) :", data.encode('hex')
    connection.close()

if __name__ == "__main__":
    main()

【问题讨论】:

  • 您使用的是什么 HSM?你的代码在哪里?我们应该如何调试这个?

标签: python hsm


【解决方案1】:

问题已解决,我使用的标头长度不正确。更正标头长度后,HSM 以正确的消息响应。

【讨论】:

  • 为了其他可能遇到类似问题的人 - 如果您能解释一下修复是什么,那就太好了。干杯!
【解决方案2】:

HSM 的设计方式是,如果它接收到任何不在其列表中的命令,它将不会提供任何正确的输出。这样做是为了增加安全性并防止外部黑客攻击。就像您的情况一样,您对发生的事情一无所知。幸运的是,问题在于标题长度。但在某些情况下,它可能是任何其他问题,HSM 不会给出正确的错误代码。

【讨论】:

  • 是的。 HSM 将仅提供某些错误代码,并且在收到任何可疑/完全错误的命令时将保持不变。
猜你喜欢
  • 2020-02-14
  • 1970-01-01
  • 2019-08-08
  • 1970-01-01
  • 2023-03-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多