C#(.NET)RSACryptoServiceProvider导入/导出x509公钥blob和PKCS8私钥blob

时间:2016-11-25 14:54:48

标签: c# cryptography rsa public-key-encryption

首先让我说我不是加密专家,但我知道基础知识。

我希望能够:

  1. 从X509公钥blob获取RSACryptoServiceProvider实例
  2. 从PKCS8私钥blob获取RSACryptoServiceProvider实例
  3. 将公钥从RSACryptoServiceProvider实例导出为x509公钥blob
  4. 将私钥从RSACryptoServiceProvider实例导出为PKCS8 blob

2 个答案:

答案 0 :(得分:0)

整天环顾四周后,我发现了repository (thanks a lot jrnker),我选择了能够达到目标1,2和3所需的代码。

由于Jrnker只提供从PKCS1 blob获取RSACryptoServiceProvider的方法(我需要的是来自PKCS8 blob的RSACryptoServiceProvider)我一直在寻找达到目标4号。然后我找到了Michel Gallant's "opensslkey.cs"和我选择了符合目标4的所需代码。

然后我开始用所需的方法和类编译一个类。

这是我的演示类:

foo.svnbar

Here's the "RSAKeyUtils" class i've compiled.

我希望这对其他人有用。

答案 1 :(得分:-2)

首先,Java中的const uniqBy = (arr, predicate) => { const cb = typeof predicate === 'function' ? predicate : (o) => o[predicate]; return [...arr.reduce((map, item) => { const key = (item === null || item === undefined) ? item : cb(item); map.has(key) || map.set(key, item); return map; }, new Map()).values()]; }; const sourceArray = [ { id: 1, name: 'bob' }, { id: 1, name: 'bill' }, null, { id: 1, name: 'bill' } , { id: 2,name: 'silly'}, { id: 2,name: 'billy'}, null, undefined ]; console.log('id string: ', uniqBy(sourceArray, 'id')); console.log('name func: ', uniqBy(sourceArray, (o) => o.name));与.Net中的byte不同。 Java只有签名整数,所以Java byte的范围是-128到127,而.Net byte的范围是0到255.但我不确定,如果这是问题,因为Base64字符串依赖于位模式。尝试在正范围内使用较大的类型,并仅使用低8位。

其次,关于不良提供者版本的消息可能表明上述原因,或者可能只是一个误导性文本,这确实没有帮助。我记得我曾经遇到过相同的错误信息,并且很难找到实际原因。几分钟前的快速搜索也没有成功。在我的情况下,我有一个完全不同的情况,所以我不能直接指出你的问题。相反,我建议检查填充,加密模式,base64转换和RSA算法周围的相关内容,并尝试找到另一种方法来实现之前所需的相同。在前往那里的路上你可能会遇到实际问题。