Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/461.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/285.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
针对JavaScript和C的RSA公钥和私钥兼容性#_Javascript_C#_Cryptography_Rsa_Encryption Asymmetric - Fatal编程技术网

针对JavaScript和C的RSA公钥和私钥兼容性#

针对JavaScript和C的RSA公钥和私钥兼容性#,javascript,c#,cryptography,rsa,encryption-asymmetric,Javascript,C#,Cryptography,Rsa,Encryption Asymmetric,我有一个多通道应用程序,它有一个Web版本和一个使用C#的移动版本 此应用程序使用“不信任任何人”安全模型。这意味着,用户注册时生成的密钥在发送到服务器之前,在客户端使用密码短语进行加密 这些密钥用于加密数据,数据也存储在服务器端 RSA私钥被加密的原因是,我们不想拥有解密数据的能力 现在,该应用程序可以在浏览器上使用,也可以通过使用Xamarin和C#的移动应用程序使用 使用JS中生成的密钥加密的数据应该能够在移动应用程序上使用C#解密,反之亦然 实现这种与JS和C兼容的加密的最佳方法是什么

我有一个多通道应用程序,它有一个Web版本和一个使用C#的移动版本

此应用程序使用“不信任任何人”安全模型。这意味着,用户注册时生成的密钥在发送到服务器之前,在客户端使用密码短语进行加密

这些密钥用于加密数据,数据也存储在服务器端

RSA私钥被加密的原因是,我们不想拥有解密数据的能力

现在,该应用程序可以在浏览器上使用,也可以通过使用Xamarin和C#的移动应用程序使用

使用JS中生成的密钥加密的数据应该能够在移动应用程序上使用C#解密,反之亦然

实现这种与JS和C兼容的加密的最佳方法是什么


PS:这些键是使用浏览器插件生成的!因此,它有点安全,因为其他应用程序将无法访问插件的后台范围。

我最初认为这太广泛了。无法详细回答为不存在的安全协议查找匹配的原语集的问题。但是,可以给出一个一般性的答案,所以我会这样做


首先需要定义协议。您不应该使用RSA或AES,而应该简单地使用E(用于加密)和D(用于解密)并指定希望使用的密钥。使用H进行散列等,确保您的方案是安全的;如果你被困在这件事上,那就问一下

定义好协议后,需要找到在C#和Java脚本上都可用的匹配原语。快速查看表明,ECIES(比RSA加密有效得多)并不直接用于Java脚本。因此,现在最好还是坚持使用RSA-OAEP。您应该已经定义了,因此您可能还希望使用AES身份验证加密(例如GCM或CCM)

请确保您的RSA实现能够抵御基于时间的攻击,但其他应用程序可能会在密钥生成或解密(或签名,如果实现的话)期间尝试读取RSA私钥



正如你所看到的,这很快就会变得困难。这就是为什么开发人员应该尝试并坚持使用预定义的构造,比如TLS。如果TLS不是一个选项,那么您可能希望查找容器格式,例如CMS或PGP,并将其用作起点。当然,为这些结构找到安全的实现也很困难(欢迎使用crypto)。

不,我们不能推荐任何内容,因为推荐请求与StackOverflow(SO)无关,将被关闭。我已编辑了我的问题以删除推荐。我所要寻找的是,是否有任何方法可以执行RSA加密和解密,从而从JS和C#生成相同的结果。我在这里寻找指导。你写的密钥是在浏览器插件中生成的。没有多少回旋余地。您只需找到一种方法将所有值移动到C#。你不会写这是什么浏览器插件,尤其是它们被保存的格式。通过这些信息可以给出最好的答案:您可以看到JS密钥是否支持某种通用格式,如果不支持,您可能可以从私钥和公钥中提取所有值(p、q、n、e等等),然后将它们传递给C#以根据这些值构建密钥。