我构建了Google License signature验证的Python实现。 我在将公共RSA密钥导入python模块时遇到问题。
密钥是一个2048位的RSA,您可以从Google Play上的开发者控制台获得此密钥的公开部分。它是“base64编码”。
当我尝试使用以下Python代码
加载它时from Crypto.PublicKey import RSA
BASE64_PUBLIC_KEY = "MIIBIjANBgkqhkiG.."
pubkey = RSA.importKey(BASE64_PUBLIC_KEY)
我收到错误ValueError: RSA key format is not supported
添加base64解码时出现同样的错误。
from Crypto.PublicKey import RSA
import base64
BASE64_PUBLIC_KEY = "MIIBIjANBgkqhkiG.."
pubkey = RSA.importKey(base64.b64decode(BASE64_PUBLIC_KEY))
检查在Android中如何加载密钥的标准实现,它是base64解码后发送到名为X509EncodedKeySpec的类。该类的构造函数接受一个参数
encodedKey - the key, which is assumed to be encoded according to the X.509 standard. The contents of the array are copied to protect against subsequent modification.
因此,我的猜测是密钥是X.509编码,然后是base64 endoded。但是,RSA模块claims中的importKey
函数支持此编码
X.509 subjectPublicKeyInfo DER SEQUENCE (binary or PEM encoding)
答案 0 :(得分:0)
您提供的x509代码开箱即用支持64位编码值的症状可能不正确。
X.509 subjectPublicKeyInfo DER SEQUENCE(二进制或PEM编码)
直接陈述二进制或pem编码。你实际上必须解码base 64编码的字符串,然后找出他们应该做什么(我不确定解码将产生哪些与X509代码相关的输出)
答案 1 :(得分:0)
我的密钥已损坏,上述方法工作正常,正如@GregS所述。