概要
cscの作法、調べてみた。
BouncyCastle.Crypto.dll使ってみた。
練習問題やってみた。
練習問題
平文を暗号化せよ。
方針
平文は、「hogehoge2」。
rsaで作る。
秘密鍵、公開鍵の両方で、やる。
サンプルコード
using System;
using System.Collections.Generic;
using System.IO;
using System.Text;
using Org.BouncyCastle.Asn1;
using Org.BouncyCastle.Asn1.X509;
using Org.BouncyCastle.Asn1.Pkcs;
using Org.BouncyCastle.Crypto;
using Org.BouncyCastle.Crypto.Generators;
using Org.BouncyCastle.Crypto.Operators;
using Org.BouncyCastle.Crypto.Parameters;
using Org.BouncyCastle.Crypto.Prng;
using Org.BouncyCastle.Math;
using Org.BouncyCastle.OpenSsl;
using Org.BouncyCastle.Pkcs;
using Org.BouncyCastle.Security;
using Org.BouncyCastle.X509;
using Org.BouncyCastle.Crypto.Engines;
using Org.BouncyCastle.Crypto.Encodings;
namespace ConsoleExample
{
class Program {
static void Main(string[] args) {
var originalText = "hogehoge2";
var originalBytes = Encoding.UTF8.GetBytes(originalText);
Console.WriteLine("original: " + Encoding.UTF8.GetString(originalBytes));
var publicKeyPem = new StreamReader(@"mypublickey.pem", Encoding.ASCII);
var publicKeyReader = new PemReader(publicKeyPem);
var publicKeyParam = (AsymmetricKeyParameter) publicKeyReader.ReadObject();
var rsa = new Pkcs1Encoding(new RsaEngine());
rsa.Init(true, publicKeyParam);
Console.WriteLine("ok");
byte[] encrypted = rsa.ProcessBlock(originalBytes, 0, originalBytes.Length);
Console.WriteLine("encrypted: " + Convert.ToBase64String(encrypted));
File.WriteAllText("myenc.txt", Convert.ToBase64String(encrypted));
var privateKeyPem = new StreamReader(@"myprivatekey.pem", Encoding.ASCII);
var privateKeyReader = new PemReader(privateKeyPem);
var keyPair = (AsymmetricCipherKeyPair) privateKeyReader.ReadObject();
var rsa2 = new Pkcs1Encoding(new RsaEngine());
rsa2.Init(true, keyPair.Private);
Console.WriteLine("ok2");
byte[] encrypted2 = rsa2.ProcessBlock(originalBytes, 0, originalBytes.Length);
Console.WriteLine("encrypted: " + Convert.ToBase64String(encrypted2));
File.WriteAllText("myenc2.txt", Convert.ToBase64String(encrypted2));
}
}
}
実行結果
>bc10
original: hogehoge2
ok
encrypted: L/okhFsA8Qku3tsYqiKWGqIHVx7TvVWOBDIXlBbZzRIVawk1zGEOHM/EmOh6Ymnrv9AxKdL/RmioCUTCer3QKLhF73jlW1ESUxOPLN8Bffnfm/IKfo/U9YWzHSV1aHevzdnWyPxJdXKasKqYRayFtHWANqFJEZqFwnN2mfl1Yg/VvrcmqNOszqVvNQC805Uwp5ENDnhCSD+2D5VgjPCh42x/IgQJrKAZMv31lRunuIeIEpUMMWcnWbUgRXX7rq368kup6RtQkcusFCwChzrlbgoSSJ57Pao+g/R5aCN8bFJvWZ00ddio0luR+bL6VR1QB8mFx4TRysgdGLtPWREf7A==
ok2
encrypted: lJ242QzTG4BAfR0vmpjYiQ5VtZxfBa0hPg0IGIr4CohTKo5TrAMYLhcorxMh4kSxEQHsMl1kFQX/uUZGeMONvnKkudrNYWS1CltgGSUscGdcRcgpz8ggmYElA5ZV08xj+a8KYRXMZHDVtg0tQ2EnGEGOuuNRW5UJP/lmi3cDWAwqu7TCAiGQ8rqcW0tRwOHJ+9Dx5jSZ44CuvBFqNK9pYRdEvU0OX7r9rj9xUSf/99CUCRUGYmpiJRJQPVPpdMdCmAOi2Zu2joMdm+KqtGAr+7mWTOgXWJeqcAmHGL1peBu3Nm3NYKN3lft5SwiG+rHcD9oqm9bJX4guTQFGHULoDA==
以上。