public bool EncryptFile(string publicKeyFile, string inputFileName, string outputFileName, ParamNameConstantsEnum encpreference) { FileStream fs; StringBuilder sb; string outputkeyfileName = outputFileName + ".info"; try { using (fs = File.Open(publicKeyFile, FileMode.Open)) { StreamReader sr = new StreamReader(fs); sb = new StringBuilder(); sb.Append(sr.ReadToEnd()); sr.Close(); } string pemkey = sb.ToString(); int startkeyphraseindex = pemkey.IndexOf(KeyPhraseConstants.PublicKeyStart, 0); int keystartindex = startkeyphraseindex + KeyPhraseConstants.PublicKeyStart.Length; int endkeyphraseindex = pemkey.IndexOf(KeyPhraseConstants.PublicKeyEnd, 0); string key = pemkey.Substring(keystartindex, pemkey.Length - (keystartindex + 1) - (pemkey.Length - endkeyphraseindex - 1)); sb = new StringBuilder(); sb.Append(key.Replace("\r", "")); sb.Replace("\n", ""); key = sb.ToString().Trim(); byte[] keydata = Convert.FromBase64String(key); RSACryptoServiceProvider rsa = new PemFileLoader().LoadPemPublicKeyFile(keydata); Console.WriteLine(" File to encrypt " + inputFileName); Console.WriteLine(" Output File " + outputFileName); if ((inputFileName != "") && (outputFileName != "")) { SymmetricFileEncryptor flencryptor = new SymmetricFileEncryptor(); byte[] data = flencryptor.EncryptFile(inputFileName, outputFileName); byte[] plaintextbuffer; using (FileStream fsout = File.Open(outputkeyfileName, FileMode.Create)) { plaintextbuffer = rsa.Encrypt(data, RSAEncryptionPadding.Pkcs1); //fsout.Write(plaintextbuffer,0,plaintextbuffer.Length); StreamWriter writer = new StreamWriter(fsout); writer.Write(Convert.ToBase64String(plaintextbuffer)); writer.Flush(); writer.Close(); fsout.Close(); } } return(true); } catch (FileNotFoundException fex) { Console.WriteLine("COuld not find key file " + fex.ToString()); } catch (Exception ex) { Console.WriteLine("General exception " + ex.ToString()); } return(false); }
internal static int Main() { Console.WriteLine("SpbDotNet Meetup PEM example"); const string privateKeyPemFile = "../../../../dev.privateKey.rsa.pem"; var privateKeyBinaryData = PemFileLoader.LoadPrivateKey(privateKeyPemFile); var rsa = RSA.Create(); rsa.ImportRSAPrivateKey(privateKeyBinaryData, out var privateKeyBytesImported); Console.WriteLine($"Private key bytes imported: {privateKeyBytesImported}"); var privateKey = new RsaSecurityKey(rsa); Console.WriteLine($"Private key size: {privateKey.KeySize} bits"); var a = rsa.ExportRSAPublicKey(); var sha1 = SHA1.Create(); privateKey.KeyId = BitConverter.ToString(sha1.ComputeHash(a)).Replace('-', ':'); Console.WriteLine($"Private key id: \"{privateKey.KeyId}\""); var signingCredentials = new SigningCredentials(privateKey, SecurityAlgorithms.RsaSha256); var jwtHeader = new JwtHeader(signingCredentials); var jwtPayload = new JwtPayload { { JwtRegisteredClaimNames.Iss, typeof(Program).Namespace }, { JwtRegisteredClaimNames.Iat, DateTimeOffset.UtcNow.ToUnixTimeSeconds() }, }; var token = new JwtSecurityToken(jwtHeader, jwtPayload); var tokenHandler = new JwtSecurityTokenHandler(); var tokenString = tokenHandler.WriteToken(token); Console.WriteLine(tokenString); return(0); }
public bool DecryptFile(string privateKeyFile, string inputFileName, string outputFileName, ParamNameConstantsEnum encpreference) { FileStream fs; StringBuilder sb; RSACryptoServiceProvider rsa; string outputkeyfileName = inputFileName + ".info";; if (encpreference == ParamNameConstantsEnum.Base64) { outputkeyfileName = outputkeyfileName.Replace(".base64", ""); } try { using (fs = File.Open(privateKeyFile, FileMode.Open)) { StreamReader sr = new StreamReader(fs); sb = new StringBuilder(); sb.Append(sr.ReadToEnd()); sr.Close(); } string pemkey = sb.ToString(); int encryptedkeyindex = pemkey.IndexOf(KeyPhraseConstants.PrivateKeyEncryptionInfo, 0); //Console.WriteLine(" key encryption index : {0}",encryptedkeyindex); if (encryptedkeyindex >= 0) { using (MemoryStream memrd = new MemoryStream()) { StreamWriter wr = new StreamWriter(memrd); wr.Write(sb.ToString()); wr.Flush(); //wr.Close(); memrd.Position = 0; StreamReader rd = new StreamReader(memrd); if (string.IsNullOrEmpty(this.privateKeyEncryptionpassword.Trim())) { throw new PasswordNotSuppliedException("Private key is encrypted...Password for Decrypting private key not provided"); } PemReader pemreader = new PemReader(rd, new PemPasswordFinder(privateKeyEncryptionpassword)); AsymmetricCipherKeyPair keyPair = (AsymmetricCipherKeyPair)pemreader.ReadObject(); RsaPrivateCrtKeyParameters rsaparams = (RsaPrivateCrtKeyParameters)keyPair.Private; RSAParameters rsp = DotNetUtilities.ToRSAParameters(rsaparams); rsa = new RSACryptoServiceProvider(); rsa.ImportParameters(rsp); rd.Close(); wr.Close(); memrd.Close(); } } else { int startkeyphraseindex = pemkey.IndexOf(KeyPhraseConstants.PrivateKeyStart, 0); int keystartindex = startkeyphraseindex + KeyPhraseConstants.PrivateKeyStart.Length; int endkeyphraseindex = pemkey.IndexOf(KeyPhraseConstants.PrivateKeyEnd, 0); string key = pemkey.Substring(keystartindex, pemkey.Length - (keystartindex + 1) - (pemkey.Length - endkeyphraseindex - 1)); sb = new StringBuilder(); sb.Append(key.Replace("\r", "")); sb.Replace("\n", ""); key = sb.ToString().Trim(); byte[] keydata = Convert.FromBase64String(key); rsa = new PemFileLoader().LoadPemPrivateKeyFile(keydata); } //Console.WriteLine(" File to decrypt " + inputFileName); //Console.WriteLine(" decrypted file" + outputFileName); if ((inputFileName != "") && (outputFileName != "")) { using (fs = File.Open(outputkeyfileName, FileMode.Open)) { byte[] decryptedbuffer; StreamReader reader = new StreamReader(fs); byte[] outbuffer = Convert.FromBase64String(reader.ReadToEnd()); reader.Close(); decryptedbuffer = rsa.Decrypt(outbuffer, RSAEncryptionPadding.Pkcs1); SymmetricFileEncryptor flencryptor = new SymmetricFileEncryptor(); switch (encpreference) { case ParamNameConstantsEnum.Base64: if (File.Exists(inputFileName)) { flencryptor.DecryptFromBase64EncodedFile(inputFileName, outputFileName, decryptedbuffer); } break; case ParamNameConstantsEnum.Binary: if (File.Exists(inputFileName)) { flencryptor.DecryptFile(inputFileName, outputFileName, decryptedbuffer); } break; default: if (File.Exists(inputFileName)) { flencryptor.DecryptFile(inputFileName, outputFileName, decryptedbuffer); } if (File.Exists(inputFileName + ".base64")) { flencryptor.DecryptFromBase64EncodedFile(inputFileName + ".base64", outputFileName + ".base64out", decryptedbuffer); } break; } } } return(true); } catch (FileNotFoundException fex) { Console.WriteLine("COuld not find key file " + fex.ToString()); } catch (PasswordNotSuppliedException pex) { Console.WriteLine("Could not decrypt private key to decrypt file : " + pex.ToString()); } catch (Exception ex) { Console.WriteLine("General exception " + ex.ToString()); } return(false); }