我正在使用 DER 编码的公共 RSA 密钥发送此命令。
HSM-EO023082018A02820181009B1EA09942164A293536A18E3881A981161BC9147548DBADFA7A3D6F7C0425331427E431A25A1EED0E8BE184AFBE0F1A0CF9F08F731F2148560ED2E9740EDF50CA823BC1A1210A82D71820E6C2DC39B871F7EE170D07CAAAC5CB7E074829B2D0AFB1AF5DE35222EE425CCF3122F5BAA0521FCEF97198102A02CAC7F85FE15785D6731674779E485448FCF934C331C5C6CDA70C31971E09D797EE340528896029AA8434100C0F732FFF7DF5DC7EED975D56E58E30A505D7B9C299B4109EC9D353D3234DA99C3DD4B5030A4F66290BAE13EA0618E11F43BF8B283C1B1A9865E551080E15F60642E15B452626ABBCB8B59E96471CFDD819D14C74C86DF3CD245EBE85D45A3EB19A1CA2CDEF133809A6079ED5C2DFD83F9419897D8064ABE119D4EC7BD01AC9DA0A8E18EADEA9AED624F63FB39DD167C4230C1745FB12A8117B2B9B630206FA7285CA804E28FBB47A013DC17880ACF58B6F3A1ADA6A7A5B3B47CD88C60C3DAB6122C1AB5571C2586BF93FAF96657FCDEDB3F766DB06E804F4FE8C890203010001~%#B00N00
his 只是标题
HSM-
,命令 EO
和 02
表示“ASN.1 公钥的 DER 编码(使用无符号表示的整数)”。接下来是编码的 DER 本身,然后是密钥块头 ~%#B00N00.
Error 04 表示“公钥不符合编码规则”。
这是通过 Thales(HSM 供应商)获得的示例,唯一的区别是他们使用的是 hsm 终端,而我的实现是通过 Java 通过 Socket 发送消息。
如果有人知道请帮忙。
在建议中,他们告诉我公钥是 ASCII,我必须转换为二进制数据
其他一些命令也有类似的问题。我必须将除公钥之外的所有字符从 ASCII 转换为十六进制。然后从那里我把它们放在一起并从十六进制转换为 ASCII。 这个小方法帮助我完成了转换
public static String hexToAscii(String input) {
StringBuilder result = new StringBuilder();
for (int i = 0; i < input.length(); i += 2) {
String str = input.substring(i, i + 2);
result.append((char) Integer.parseInt(str, 16));
}
return result.toString();
}
可能有更聪明的方法,但它对我有用。