【发布时间】:2015-12-23 05:57:01
【问题描述】:
我有一个PublicKey (java.security.PublicKey)。
我需要将其转换为 HEX 字符串。
就像您打开证书(例如在 Windows 上)并查看公钥信息时一样。你会看到:
04 40 ad 77 10 45 08 f2 3a ae 1d 1d 95 22 2f b3 f5 e5 2f da db 8c 39 3a 03 15 fb 4b 36 28 46 de 7b 00 f4 73 11 ae b9 ac 00 aa 19 34 6d fb 7c 56 b1 93 c0 1b 86 7c d0 a2 0b 4d 22 a9 d2 4d b0 f6 34 c4 (*)
任何想法如何做到这一点?
编辑:
我试过了:
Hex.encodeHexString(cert.getPublicKey.getEncoded)
它返回一个字符串:
3063301c06062a8503020213301206072a85030202230106072a850302021e01034300_0440ad77104508f23aae1d1d95222fb3f5e52fdadb8c393a0315fb4b362846de7b00f47311aeb9ac00aa19346dfb7c56b193c01b867cd0a20b4d22a9d24db0f634c4
此字符串包含 HEX 值 (*)(我将 _ 放在它开始的位置)。
【问题讨论】:
-
您尝试过任何东西了吗?
PublicKey有一个getEncoded()方法来返回字节,然后你只需要一个字节数组到十六进制的转换——在 Stack Overflow 上有很多例子。 -
@JonSkeet 是的,我试过了。
getEncoded以其主要编码格式返回密钥。就我而言,它是 X.509。那么,如何解码呢? -
是什么让您认为您需要对其进行解码?如果您将
getEncoded()返回的字节转换为十六进制,与您在问题中显示的十六进制相比如何? -
你想用这个公钥做什么?这是 RSA 密钥吗?您需要它的哪些部分:模数 (
n) 或公共指数 (e) 或两者兼而有之?以什么格式? (我不知道 Windows for ex. 使用什么格式。)
标签: java cryptography hex x509certificate public-key