2016-02-25 3 views
1

Я пытаюсь отправить команды HSM (Thales paysheild 9000) с использованием кода python. Но ответ, который я получаю от кода, не соответствует желаемому.Проблема при отправке команды в HSM

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() 
+0

С каким HSM вы работаете? Где ваш код? Как мы должны отлаживать это? – duskwuff

ответ

1

HSMs спроектированы таким образом, что если он получает любую команду, которая не входит в ее список, она не будет обеспечивать надлежащего вывода. Это делается для дополнительной безопасности и предотвращения внешнего взлома. Как и в вашем случае, вы не имели понятия о том, что происходит. К счастью, проблема связана с длиной заголовка. Но в некоторых случаях это может быть любая другая проблема, и HSM не даст правильный код ошибки.

+0

Правда. HSM будут предоставлять только определенные коды ошибок и будут сохраняться, если они получат какую-либо подозрительную/совершенно неправильную команду. –

2

Проблема была решена, длина заголовка, которую я использовал, была неправильной. После исправления длины заголовка HSM вернул правильное сообщение.

Смежные вопросы