虽然之前有人问过这个问题,并在(JWT encrypting payload in python?(JWE))上得到了回答,但我似乎无法让JWK正常工作-我尝试导入我的明文RSA密钥,但出现了一个错误(在下面添加stacktrace)。有人能告诉我我做错了什么吗?
Traceback (most recent call last):
File "statenc.py", line 169, in <module>
test()
File "statenc.py", line 155, in test
keypair = statEnc()
File "statenc.py", line 48, in __init__
self.pub_jwk = jwk.JWK.import_from_pem(self, data=self.pubkeystr, password=None)
File "/usr/lib/python3.6/site-packages/jwcrypto/jwk.py", line 624, in import_from_pem
data, password=password, backend=default_backend())
File "/usr/lib/python3.6/site-packages/cryptography/hazmat/primitives/serialization.py", line 20, in load_pem_private_key
return backend.load_pem_private_key(data, password)
File "/usr/lib/python3.6/site-packages/cryptography/hazmat/backends/openssl/backend.py", line 978, in load_pem_private_key
password,
File "/usr/lib/python3.6/site-packages/cryptography/hazmat/backends/openssl/backend.py", line 1129, in _load_key
mem_bio = self._bytes_to_bio(data)
File "/usr/lib/python3.6/site-packages/cryptography/hazmat/backends/openssl/backend.py", line 432, in _bytes_to_bio
data_char_p = self._ffi.new("char[]", data)
TypeError: initializer for ctype 'char[]' must be a bytes or list or tuple, not str
我的代码如下:(这是针对一个模块,该模块在没有提供现有密钥的情况下初始化新的RSA密钥)
def __init__(self, pubkeystr = None, privkeystr = None, sessionkey = None):
self.pubkeystr = pubkeystr
self.privkeystr = privkeystr
self.sessionkey = sessionkey
if pubkeystr == None or privkeystr == None: #if blank, generate keys
self.random_generator = Random.new().read
self.keys = RSA.generate(1024, self.random_generator)
self.pubkey = self.keys.publickey()
self.pubkeystr = self.pubkey.exportKey(format='PEM',
passphrase=None,
pkcs=1).decode('utf-8')
self.pubcipher = PKCS1_OAEP.new(self.pubkey)
self.privcipher = PKCS1_OAEP.new(self.keys)
self.privkeystr = self.keys.exportKey(format='PEM',
passphrase=None,
pkcs=1).decode('utf-8')
self.privkey = self.keys.exportKey()
else: #import the keys
self.pubkeystr = pubkeystr
self.privkeystr = privkeystr
self.pubkey = RSA.importKey(pubkeystr)
self.pubcipher = PKCS1_OAEP.new(self.pubkey)
self.privkey = RSA.importKey(privkeystr)
self.privcipher = PKCS1_OAEP.new(self.privkey)
if sessionkey == None:
sessionkey = get_random_bytes(16)
else:
self.sessionkey = sessionkey
# Now setup the JWKs
self.pub_jwk = jwk.JWK.import_from_pem(self, data=self.pubkeystr, password=None)
self.priv_jwk = jwk.JWK.import_from_pem(self, data=self.privkeystr, password=None)
print("%s \n %s" % (self.pub_jwk, self.priv_jwk))
我知道这是一个老生常谈的问题,但我在疯狂地寻找其他jwcrypto选项的答案时偶然发现了它。我知道你可能已经解决了,但我会把它留给其他用户。粗略地说,错误在于需要将字符串编码为字节。
改变
self.pub_jwk = jwk.JWK.import_from_pem(self, data=self.pubkeystr, password=None)
self.priv_jwk = jwk.JWK.import_from_pem(self, data=self.privkeystr, password=None)
到
self.pub_jwk = jwk.JWK.import_from_pem(self, data=self.pubkeystr.encode('UTF-8'), password=None)
self.priv_jwk = jwk.JWK.import_from_pem(self, data=self.privkeystr.encode('UTF-8'), password=None)
应该可以解决问题。
我试图通过遵循本教程在heroku上部署php应用程序https://devcenter.heroku.com/articles/getting-started-with-php#introduction 当前正在执行此步骤https://devcenter.heroku.com/articles/getting-started-with-php#deploy-应用程序 当我运行命令“git pu
我们如何加载他们的公钥?
如何从Go中的字符串导入RSA公钥,以便用于加密数据? 我的程序应该执行以下操作: > 接收一个用Base64编码的公钥 将此公钥从Base64解码为字节 导入公钥,以便Go的RSA实现可以使用(问题在这个阶段) 加密AES密钥: 提前谢谢! 解决方案: 公钥必须使用crypto/x509包进行解码。 例如: 然后可以使用带有RSA的进行加密。
我使用的是ruby EC2 SDK,版本2。用EC2生成的密钥的私钥材料存储在字符串中。我正在尝试使用生成将密钥导入EC2所需的公钥材料 我尝试了一些新的东西。我使用EC2 web控制台从头开始生成了一个新密钥,然后按照Raphael在下面指出的方法生成了一个公共密钥 密钥未加密。 在尝试通过web控制台或代码导入公钥时,我得到了同样的错误。 而第一个生成的文件以 现在的问题是如何在Ruby中生成
Im试图使用SQOOP将一个小表从mysql导出到HDFS,该表有两列id(主键)和名称。我可以通过SQOOP列出数据库和表。但在将表导入到HDFS时出现异常。好心的帮助。下面是错误日志。
我想向AndroidKeyStore导入一个密钥。所以,我可以通过openssl以以下方式生成它 openssl rsa-text-in privateKey2048。佩姆 openssl pkcs8-topk8-通知PEM-in/私钥2048。pem-出口-出口私家车2048。德诺克里普特酒店 然后我可以把它从private2048.der转换成十六进制格式,可以在Android应用程序中的by