对示例代码中应用的概念“带RSA加密的JSON Web令牌(JWT)”有疑问
参见:http://connect2id.com/products/nimbus-jose-jwt/examples/jwt-with-rsa-encryption
我的问题:为什么客户端使用私钥?为什么不在加密器上使用私钥,在解密器类上使用公钥呢?
欢迎对此RSA示例代码的概念方面进行澄清。
如示例所述,加密的目标是保密性:确保数据仅由预期的接收者读取
公钥加密的一个重要的安全方面是确保数据是为预定的接收者加密的,而不是为其他方加密的,这可能会损害数据的保密性。
为各方之间的身份验证而颁发的JSON Web令牌不是加密的,而是使用私钥进行数字签名的。对方可以用公布的公钥验证真实性和完整性。但内容并不隐藏。观察者可以读取消息,但不能修改它。
加密是用收件人的公钥完成的。只有匹配私钥的所有者才能解密JWT的内容。由于使用RSa密钥加密的数据的大小限制,在示例中生成AES symmetryc加密密钥。消息将用AES密钥加密,该密钥用RSA公钥加密并嵌入到JWT中。接收者将用RSA私有密钥解密AES密钥
并且我将这个函数称为用RSA公钥加密DSA密钥的函数:
我需要在C#中加密数据,以便将其传递给Java。Java代码属于第三方,但我得到了相关的源代码,因此我决定,由于Java使用Bouncy Castle库,所以我将使用C#端口。 解密工作正常。但是,解密仅在使用私钥使用encrypt时有效,而不是使用公钥。使用公钥时,解密失败,出现。 编辑: 我还添加了一个单元测试,它证明公钥等于从私钥中提取的公钥:
主要的问题是,我对C相当陌生,OpenSSL留档对我来说不够清晰,我尝试过使用读和写rsa键到C中的pem文件,但我不太明白。例如,函数如何创建私有和公共?而从何而来?pcszPassphrase的意义是什么? 我会解释,好像这是某种伪代码,这就是我想做的,粗体部分是我不知道如何做的: 生成私钥和公钥作为十六进制缓冲区(客户端) 基本上,我知道如何处理AES加密/解密和通信协议,反正他们已经实现了
我找到了几个可以使用的解决方案。Net RSA Provider使用公钥对消息进行加密,并使用私钥对其解密。 但我想要的是用私钥加密,用公钥解密。 我希望在我的应用程序中存储公钥,并使用私钥加密许可证,例如在我的开发人员计算机上,将其发送到应用程序,并让信息使用公钥解密。 我怎样才能做到这一点?
我一直在阅读一些RSA文献和堆栈溢出问题,但我没有得到明确的答案。 仅给定一个RSA私钥模和私钥指数,这是我所拥有的全部(也足够用于所有密码相关操作),我能得到相关的公钥模和公钥指数吗? 另外,我是否可以仅用这两个参数获得私钥的编码形式?我在java中尝试了以下方法(java不是实际的请求),但是支持它的OpenSSL引擎失败,错误为:04000090:RSA例程:openSSL_internal
我想使用带有RSA算法的OpenSSL使用私钥加密文件: 现在,如果我执行解密操作: 此操作需要私钥 我知道我应该使用公钥进行加密,如果我使用私钥,我会得到一个签名。 然而,我想这样做是为了学习。