LoginSignup
0
0

More than 1 year has passed since last update.

cscの作法 その254

Last updated at Posted at 2022-07-24

概要

cscの作法、調べてみた。
練習問題やってみた。

練習問題

pem秘密鍵ファイルからJsonWebKeyを生成せよ。

方針

pem読み込みにBouncyCastleを使う
RSACryptoServiceProviderに変換
xml読み込んで、ExponentとModulusを使う
base64url使う

サンプルコード

using System;
using System.IO;
using System.Security.Cryptography;
using Org.BouncyCastle.X509;
using Org.BouncyCastle.Math;
using Org.BouncyCastle.Asn1.X509;
using Org.BouncyCastle.Asn1.Pkcs;
using Org.BouncyCastle.Crypto.Operators;
using Org.BouncyCastle.Security;
using System.Collections.Generic;
using System.Text;
using Org.BouncyCastle.Asn1;
using Org.BouncyCastle.Crypto;
using Org.BouncyCastle.Crypto.Generators;
using Org.BouncyCastle.Crypto.Parameters;
using Org.BouncyCastle.Crypto.Prng;
using Org.BouncyCastle.OpenSsl;
using Org.BouncyCastle.Pkcs;

	class test0 {
		static void Main() {
			AsymmetricCipherKeyPair privateKey;
			using (var reader = new StreamReader(@"privatekey.pem", Encoding.ASCII))
			{
				var pemReader = new PemReader(reader);
				privateKey = (AsymmetricCipherKeyPair) pemReader.ReadObject();
			}
			var rsaParams = DotNetUtilities.ToRSAParameters((RsaPrivateCrtKeyParameters) privateKey.Private);
			RSACryptoServiceProvider csp = new RSACryptoServiceProvider();
			csp.ImportParameters(rsaParams);
			File.WriteAllText("privatekey.xml", csp.ToXmlString(true));
			var privateKey2 = File.ReadAllText("privateKey.xml");
			var rsa = RSA.Create();
			rsa.FromXmlString(privateKey2);
			var publicParameters = rsa.ExportParameters(false);
			var e = Convert.ToBase64String(publicParameters.Exponent).TrimEnd('=').Replace('+', '-').Replace('/', '_');
			var n = Convert.ToBase64String(publicParameters.Modulus).TrimEnd('=').Replace('+', '-').Replace('/', '_');
			var dict = new Dictionary<string, string>() {
				{"e", e},
				{"kty", "RSA"},
				{"n", n}
			};
			foreach (var item in dict)
			{
				Console.WriteLine(item.Key + ": " + item.Value);
			}
		}
	}

実行結果




>bc18
e: AQAB
kty: RSA
n: lrpUlgxTaOLAUNOus45cl_VBOtqoAv1Y3w3ka5VLzxHVgw9Z4gW1t5a1KsbboJQn_u_gG5SJ_FaV4RzlJe_nGxYYep5fcfSHiZPCV__5xl7QJLvh4PzA6vXJ3BJQF7mEx5xvvW2Ga-gTYpfAQppo_OGcjGJ1VLw06x4oNUliz9zH_vUROlNR2Tbhl8xpSUY6LCPJiQvhVbIBC6GJKosfrXXe-rtrGbUrNtsOjGYJk7496_hzHtsrDy-HdBAWKDjdot7GW2ESxybIrVUIDvyNXV9CUyyQmC_jA6_yiAN9xrWK75Un7Eav_bbhOKVGN9DC2JaSoTcjavomP9QMEWjWOxNcCX0f6iONBGDw4FpaYaCRyiqkD_lY1xfAFLEhD_5QY6GWvHgvRSDyjQwV8Mc4ZUORsEX7eN1DUdIZUfJ5lsRFwXuxCnjgzkdi_-RZocPOuaFkjpX_Es0ZcWc8Rb_-dyaJQlVzrQHC7y8LduPa-qotb7vLUjoxp-1g0yGeK6Sy4sXO0UflrrfsIn8vfmW3VNFxhUUJB4ruXw99yAkyGwCWEonYH3GbK09sx-3_cNDZdx9V04q3vp3nMr0jQ2VfF6I5pRGRl6niWUDNH5OFcGOQ6DRBGaaJ-LXXn6dnsvpimPmf38pshYV8OiHVl1o4fP0NxdeQl25XIpGAWJEJJAE
ok

>

以上。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0