我正在创建一个API,它将使用公钥/私钥对来验证用户身份。
我一直在使用.NET RSACryptoServiceProvider和BouncyCastle库来创建这些对。
它有效,但输出远非用户友好。这些键包含各种符号,如+ - / =。
我使用了几个生成公钥/私钥的API服务,这些键总是非常整洁,只有数字和字母。
那么如何创建更多用户友好/读者友好的密钥对?这是我目前正在使用的BouncyCastle代码:
var r = new RsaKeyPairGenerator();
r.Init(new KeyGenerationParameters(new SecureRandom(), keySizeInBits));
var keys = r.GenerateKeyPair();
AsymmetricCipherKeyPair pair = GenerateKeys(64);
PrivateKeyInfo privateKeyInfo = PrivateKeyInfoFactory.CreatePrivateKeyInfo(pair.Private);
byte[] serializedPrivateBytes = privateKeyInfo.ToAsn1Object().GetDerEncoded();
txtPrivateKey.Text = Convert.ToBase64String(serializedPrivateBytes);
SubjectPublicKeyInfo publicKeyInfo = SubjectPublicKeyInfoFactory.CreateSubjectPublicKeyInfo(pair.Public);
byte[] serializedPublicBytes = publicKeyInfo.ToAsn1Object().GetDerEncoded();
txtPublicKey.Text = Convert.ToBase64String(serializedPublicBytes);
这是一个示例输出:
MCAwDQYJKoZIhvcN+A+Q+EB/BQADDwAwD/+AIFAMpTPYUCAwEAAQ==
编辑:我添加了一张图片来说明。这是来自cryptocoin交换。
(显然这些密钥不再有效)。
要使用API,您必须使用公钥和私钥加密数据,并使用POST发送。
我已经看到许多API受到这样的保护,它们都使用类似的,“漂亮”的公钥/私钥。