Example #1
0
        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);
        }
Example #2
0
        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);
        }
Example #3
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);
        }