【问题标题】:Thales HSM 8000 A2 command sending (generate clear component)Thales HSM 8000 A2 命令发送(生成清除组件)
【发布时间】:2014-07-30 11:39:28
【问题描述】:

使用 Java,我在 HSM 端口中发送 A2 命令,但收到错误。

Input to HSM : 0000A2002U
Output from HSM : 0000A318

在文档中我发现 A3 - 这是对 A2 命令的响应,18 是一个错误,这意味着:未加载文档格式定义

我需要生成一个清晰的组件(不是 A0 命令中的键)。在控制台模式下,我使用gc 命令。

Java 代码:

System.out.println("<<< Connected to HSM  >>>:" + socket.isConnected());
in = new DataInputStream (new BufferedInputStream(socket.getInputStream()));
out = new DataOutputStream (new BufferedOutputStream(socket.getOutputStream()));
command = "0000A2002U";
out.writeUTF(command);
System.out.println("Input to HSM : " +command);
out.flush();
String response = in.readUTF();
System.out.println("Output from HSM : " +response);
System.out.println("");

【问题讨论】:

    标签: java command


    【解决方案1】:

    将此数据发送到 HSM:

    000A30303030413230303255 **** 0 0 0 0 A 2 0 0 2 U

    其中 **** 表示要发送的十六进制数据大小。

    HSM 返回两个帧:
    一个用于命令接收,另一个用于打印信息。像这样:
    000000A300U9FABB20DD3BACFD81B832D918B008B4A
    000000AZ00

    【讨论】:

    • 哪些数据必须在****下?那是我必须发送给 HSM:command = "000A30303030413230303255**** 0 0 0 0 A 2 0 0 2 U" 以生成清除组件吗?
    • 在上面的示例中,值:000A 表示数据的长度(0000A2002U)。
    【解决方案2】:
        package hsm;
    
    import java.io.BufferedInputStream;
    import java.io.BufferedOutputStream;
    import java.io.DataInputStream;
    import java.io.DataOutputStream;
    import java.net.Socket;
    
    public class TestHSMJava {
        public static void main(String args[]) {
        System.out.println("<<< Main Method Entry >>>");
    
        String command = null;
        Socket socket = null;
        DataOutputStream out = null;
        DataInputStream in = null;
        byte[] b= new byte[100];
        try {
            socket = new Socket("127.0.0.1", 9998);
            System.out.println("<<< Socket >>> :" + socket);
            if (socket != null) {
               /* System.out.println("<<< Connected to HSM  >>>:"
                        + socket.isConnected());
                in = new DataInputStream (new BufferedInputStream(socket.getInputStream()));
                out = new DataOutputStream (new BufferedOutputStream(socket.getOutputStream()));
                command = "0006303030304e43";
                out.writeUTF(command);
                System.out.println("Input to HSM : " +command);
                out.flush();
                String response = in.readUTF();
                System.out.println("Output from HSM : " +response);
                System.out.println("..");*/
                System.out.println("<<< Connected to HSM  >>>:" + socket.isConnected());
                in = new DataInputStream (new BufferedInputStream(socket.getInputStream()));
                out = new DataOutputStream (new BufferedOutputStream(socket.getOutputStream()));
                command = "000A3030303041323030325500060000A2002U";
                out.writeUTF(command);
                System.out.println("Input to HSM : " +command);
                out.flush();
                String response = in.readUTF();
                System.out.println("Output from HSM : " +response);
                System.out.println("");
        }
    
        } catch (Exception e) {
            // TODO: handle exception
        }
        }}
    

    【讨论】:

    • 考虑为您的答案添加一些上下文,而不仅仅是一段代码。它将帮助其他人了解您是如何解决问题的。
    【解决方案3】:

    我认为java方法writeUTF将de消息长度放在de命令之前。

    您的命令必须是“3030303041323030325500060000A2002U”,因为 writeUTF 放在 000A 之前。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-27
      相关资源
      最近更新 更多