예제 #1
0
        /// <summary>
        /// Export RSA public key
        /// </summary>
        /// <param name="rsa"></param>
        /// <param name="format"></param>
        /// <param name="usePemFormat"></param>
        /// <returns></returns>
        public static string ExportPublicKey(this MsRSA rsa, RsaKeyFormat format, bool usePemFormat = false)
        {
            var key = format switch
            {
                RsaKeyFormat.XML => rsa.ExportKeyInLvccXml(false),
                RsaKeyFormat.JSON => rsa.ExportKeyInJson(false),
#if NETCOREAPP3_1 || NETSTANDARD2_1
                RsaKeyFormat.Pkcs1 => BaseConv.ToBase64(rsa.ExportRSAPublicKey()),
                RsaKeyFormat.Pkcs8 => BaseConv.ToBase64(rsa.ExportRSAPublicKey()),
#else
                RsaKeyFormat.Pkcs1 => rsa.GetPublicKeyInPkcs1(),
                RsaKeyFormat.Pkcs8 => rsa.GetPublicKeyInPkcs8(),
#endif
                _ => throw new NotSupportedException("Unknown RSA key type.")
            };

            if (usePemFormat)
            {
                key = format switch
                {
                    RsaKeyFormat.XML => key,
                    RsaKeyFormat.JSON => key,
                    RsaKeyFormat.Pkcs1 => key.RemovePkcs1PublicKeyFormat(),
                    RsaKeyFormat.Pkcs8 => key.RemovePkcs8PublicKeyFormat(),
                    _ => throw new NotSupportedException("Unknown RSA key type.")
                };
            }

            return(key);
        }
예제 #2
0
        public void ZBase32StringTest()
        {
            var baseVal     = BaseConv.ToZBase32String("Alex LEWIS");
            var originalVal = BaseConv.FromZBase32String(baseVal);

            Assert.Equal("Alex LEWIS", originalVal);
        }
예제 #3
0
            public static string PrivateKeyPkcs8ToXml(string privateKey)
            {
                var privateKeyBytes = BaseConv.FromBase64(privateKey.RemovePkcs8PrivateKeyFormat());
                var privateKeyParam = (RsaPrivateCrtKeyParameters)PrivateKeyFactory.CreateKey(privateKeyBytes);

                //Key
                var element = new XElement("RSAKeyValue");

                var privateModulus  = new XElement("Modulus", Convert.ToBase64String(privateKeyParam.Modulus.ToByteArrayUnsigned()));
                var privateExponent = new XElement("Exponent", Convert.ToBase64String(privateKeyParam.PublicExponent.ToByteArrayUnsigned()));
                var privateP        = new XElement("P", Convert.ToBase64String(privateKeyParam.P.ToByteArrayUnsigned()));
                var privateQ        = new XElement("Q", Convert.ToBase64String(privateKeyParam.Q.ToByteArrayUnsigned()));
                var privateDp       = new XElement("DP", Convert.ToBase64String(privateKeyParam.DP.ToByteArrayUnsigned()));
                var privateDq       = new XElement("DQ", Convert.ToBase64String(privateKeyParam.DQ.ToByteArrayUnsigned()));
                var privateInverseQ = new XElement("InverseQ", Convert.ToBase64String(privateKeyParam.QInv.ToByteArrayUnsigned()));
                var privateD        = new XElement("D", Convert.ToBase64String(privateKeyParam.Exponent.ToByteArrayUnsigned()));

                element.Add(privateModulus);
                element.Add(privateExponent);
                element.Add(privateP);
                element.Add(privateQ);
                element.Add(privateDp);
                element.Add(privateDq);
                element.Add(privateInverseQ);
                element.Add(privateD);

                return(element.ToString());
            }
예제 #4
0
        public void Encrypt_ThreeRCX()
        {
            var key        = RcFactory.GenerateKey("alexinea", Encoding.UTF8);
            var function   = RcFactory.Create(RcTypes.ThreeRCX, key);
            var cryptoVal0 = function.Encrypt("ABCDDDDDDDDDDDDDDDDDDDDDD");

            BaseConv.ToBase64(cryptoVal0.CipherData).ShouldBe("JPTCrl2N6xae4GCEXfzUiSa9YrwSa80HDg==");
        }
예제 #5
0
 public string GetBase64String()
 {
     if (!IncludeData())
     {
         return(string.Empty);
     }
     return(BaseConv.ToBase64(_data));
 }
예제 #6
0
        public void Encrypt()
        {
            var key        = RcFactory.GenerateKey("alexinea", Encoding.UTF8);
            var function   = RcFactory.Create(RcTypes.RC4, key);
            var cryptoVal0 = function.Encrypt("image");

            BaseConv.ToBase64(cryptoVal0.CipherData).ShouldBe("I2YRaZo=");
        }
예제 #7
0
        public void Encrypt()
        {
            var key        = RcFactory.GenerateKey("alexinea", Encoding.UTF8);
            var function   = RcFactory.Create(RcTypes.RCX, key);
            var cryptoVal0 = function.Encrypt("ABCDDDDDDDDDDDDDDDDDDDDDD");

            BaseConv.ToBase64(cryptoVal0.CipherData).ShouldBe("C+YxcfWRWMVCIjbX21qXcG9OXq25jJTHmw==");
        }
예제 #8
0
        public void ZBase32BytesTest()
        {
            var byteArray         = Encoding.UTF8.GetBytes("Alex LEWIS");
            var baseVal           = BaseConv.ToZBase32(byteArray);
            var originalByteArray = BaseConv.FromZBase32(baseVal);
            var originalVal       = Encoding.UTF8.GetString(originalByteArray);

            Assert.Equal("Alex LEWIS", originalVal);
        }
예제 #9
0
            public byte[] Hash(ReadOnlySpan <byte> buff)
            {
                using var algorithm = MD5.Create();
                var hashVal = algorithm.ComputeHash(buff.ToArray());

                return(_type switch
                {
                    MdTypes.Md5 => hashVal,
                    MdTypes.Md5Bit16 => hashVal.AsSpan(4, 8).ToArray(),
                    MdTypes.Md5Bit32 => hashVal,
                    MdTypes.Md5Bit64 => Encoding.UTF8.GetBytes(BaseConv.ToBase64(hashVal)),
                    _ => hashVal
                });
        public static void TouchFromPublicKeyInPkcs8(this MsRSA rsa, string publicKey, out RSAParameters parameters)
        {
            var publicKeyBytes = BaseConv.FromBase64(publicKey.RemovePkcs8PublicKeyFormat());
            var publicKeyParam = (RsaKeyParameters)PublicKeyFactory.CreateKey(publicKeyBytes);

            parameters = new RSAParameters
            {
                Modulus  = publicKeyParam.Modulus.ToByteArrayUnsigned(),
                Exponent = publicKeyParam.Exponent.ToByteArrayUnsigned()
            };

            rsa.ImportParameters(parameters);
        }
예제 #11
0
        public void Encrypt_L256_WithSalt_Test()
        {
            var key        = AesFactory.GenerateKey(AesTypes.Aes256);
            var function   = AesFactory.Create(AesTypes.Aes256, key);
            var cryptoVal0 = function.Encrypt("实现中华民族伟大复兴的中国梦", "12345678");
            var cryptoVal1 = function.Decrypt(cryptoVal0.CipherData, "12345678");

            cryptoVal1.GetOriginalDataDescriptor().GetString().ShouldBe("实现中华民族伟大复兴的中国梦");

            var cryptoVal2 = function.Decrypt(BaseConv.ToBase64(cryptoVal0.CipherData), "12345678", CipherTextTypes.Base64Text);

            cryptoVal2.GetOriginalDataDescriptor().GetString().ShouldBe("实现中华民族伟大复兴的中国梦");
        }
예제 #12
0
        public void EncryptDecrypt_WithSalt_WithAutoCreateKey_L128_Test()
        {
            var key        = DesFactory.GenerateKey(DesTypes.TripleDES128);
            var function   = DesFactory.Create(DesTypes.TripleDES128, key);
            var cryptoVal0 = function.Encrypt("实现中华民族伟大复兴的中国梦", "123412341234");
            var cryptoVal1 = function.Decrypt(cryptoVal0.CipherData, "123412341234");

            cryptoVal1.GetOriginalDataDescriptor().GetString().ShouldBe("实现中华民族伟大复兴的中国梦");

            var cryptoVal2 = function.Decrypt(BaseConv.ToBase64(cryptoVal0.CipherData), "123412341234", CipherTextTypes.Base64Text);

            cryptoVal2.GetOriginalDataDescriptor().GetString().ShouldBe("实现中华民族伟大复兴的中国梦");
        }
예제 #13
0
        public void TEATest()
        {
            var key        = TeaFactory.GenerateKey("alexinea", Encoding.UTF8);
            var function   = TeaFactory.Create(TeaTypes.TEA, key);
            var cryptoVal0 = function.Encrypt("AlexLEWIS      ");

            var cryptoVal1 = function.Decrypt(cryptoVal0.CipherData);

            cryptoVal1.GetOriginalDataDescriptor().GetString().ShouldBe("AlexLEWIS      ");

            var cryptoVal2 = function.Decrypt(BaseConv.ToBase64(cryptoVal0.CipherData), CipherTextTypes.Base64Text);

            cryptoVal2.GetOriginalDataDescriptor().GetString().ShouldBe("AlexLEWIS      ");
        }
예제 #14
0
        public void EncryptDecrypt_WithAutoCreateKey_Test()
        {
            var key        = DesFactory.GenerateKey();
            var function   = DesFactory.Create(DesTypes.DES, key);
            var cryptoVal0 = function.Encrypt("image");

            var cryptoVal1 = function.Decrypt(cryptoVal0.CipherData);

            cryptoVal1.GetOriginalDataDescriptor().GetString().ShouldBe("image");

            var cryptoVal2 = function.Decrypt(BaseConv.ToBase64(cryptoVal0.CipherData), CipherTextTypes.Base64Text);

            cryptoVal2.GetOriginalDataDescriptor().GetString().ShouldBe("image");
        }
예제 #15
0
        public static byte[] GetBytes(this CipherTextTypes signatureTextType, string signature, Encoding encoding = default, Func <string, byte[]> customCipherTextConverter = null)
        {
            encoding = encoding.SafeEncodingValue();

            return(signatureTextType switch
            {
                CipherTextTypes.PlainText => encoding.GetBytes(signature),
                CipherTextTypes.Base32Text => BaseConv.FromBase32(signature),
                CipherTextTypes.Base64Text => BaseConv.FromBase64(signature),
                CipherTextTypes.Base91Text => BaseConv.FromBase91(signature),
                CipherTextTypes.Base256Text => BaseConv.FromBase256(signature),
                CipherTextTypes.ZBase32Text => BaseConv.FromZBase32(signature),
                CipherTextTypes.Hex => Org.BouncyCastle.Utilities.Encoders.Hex.Decode(signature),
                _ => customCipherTextConverter is null?encoding.GetBytes(signature) : customCipherTextConverter(signature)
            });
예제 #16
0
        public void EncryptDecrypt_WithSalt_Test()
        {
            var key        = DesFactory.GenerateKey(DesTypes.DES, "alexinea", "forerunner", Encoding.UTF8);
            var function   = DesFactory.Create(DesTypes.DES, key);
            var cryptoVal0 = function.Encrypt("image", "123412341234");

            BaseConv.ToBase64(cryptoVal0.CipherData).ShouldBe("s4h5u8hA/2Y=");

            var cryptoVal1 = function.Decrypt(cryptoVal0.CipherData, "123412341234");

            cryptoVal1.GetOriginalDataDescriptor().GetString().ShouldBe("image");

            var cryptoVal2 = function.Decrypt(BaseConv.ToBase64(cryptoVal0.CipherData), "123412341234", CipherTextTypes.Base64Text);

            cryptoVal2.GetOriginalDataDescriptor().GetString().ShouldBe("image");
        }
예제 #17
0
        public void EncryptDecrypt_L192_Test()
        {
            var key        = DesFactory.GenerateKey(DesTypes.TripleDES192, "alexinea&#%12!", "forerunner", Encoding.UTF8);
            var function   = DesFactory.Create(DesTypes.TripleDES192, key);
            var cryptoVal0 = function.Encrypt("image");

            BaseConv.ToBase64(cryptoVal0.CipherData).ShouldBe("Y6tAf/GrLx8=");

            var cryptoVal1 = function.Decrypt(cryptoVal0.CipherData);

            cryptoVal1.GetOriginalDataDescriptor().GetString().ShouldBe("image");

            var cryptoVal2 = function.Decrypt(BaseConv.ToBase64(cryptoVal0.CipherData), CipherTextTypes.Base64Text);

            cryptoVal2.GetOriginalDataDescriptor().GetString().ShouldBe("image");
        }
        public static void TouchFromPrivateKeyInPkcs8(this MsRSA rsa, string privateKey, out RSAParameters parameters)
        {
            var privateKeyBytes = BaseConv.FromBase64(privateKey.RemovePkcs8PrivateKeyFormat());
            var privateKeyParam = (RsaPrivateCrtKeyParameters)PrivateKeyFactory.CreateKey(privateKeyBytes);

            parameters = new RSAParameters
            {
                Modulus  = privateKeyParam.Modulus.ToByteArrayUnsigned(),
                Exponent = privateKeyParam.PublicExponent.ToByteArrayUnsigned(),
                P        = privateKeyParam.P.ToByteArrayUnsigned(),
                Q        = privateKeyParam.Q.ToByteArrayUnsigned(),
                DP       = privateKeyParam.DP.ToByteArrayUnsigned(),
                DQ       = privateKeyParam.DQ.ToByteArrayUnsigned(),
                InverseQ = privateKeyParam.QInv.ToByteArrayUnsigned(),
                D        = privateKeyParam.Exponent.ToByteArrayUnsigned()
            };

            rsa.ImportParameters(parameters);
        }
예제 #19
0
        /// <summary>
        /// Import RSA public key
        /// </summary>
        /// <param name="rsa"></param>
        /// <param name="format"></param>
        /// <param name="publicKey"></param>
        /// <param name="isPem"></param>
        public static void ImportPublicKey(this MsRSA rsa, RsaKeyFormat format, string publicKey, bool isPem = false)
        {
            if (isPem)
            {
                publicKey = format switch
                {
                    RsaKeyFormat.XML => publicKey,
                    RsaKeyFormat.JSON => publicKey,
                    RsaKeyFormat.Pkcs1 => publicKey.RemovePkcs1PublicKeyFormat(),
                    RsaKeyFormat.Pkcs8 => publicKey.RemovePkcs8PublicKeyFormat(),
                    _ => throw new NotSupportedException("Unknown RSA key type.")
                };
            }

            switch (format)
            {
            case RsaKeyFormat.XML:
                rsa.ImportKeyInLvccXml(publicKey);
                break;

            case RsaKeyFormat.JSON:
                rsa.ImportKeyInJson(publicKey);
                break;

            case RsaKeyFormat.Pkcs1:
#if NETCOREAPP3_1 || NETSTANDARD2_1
                rsa.ImportRSAPublicKey(BaseConv.FromBase64(publicKey), out _);
#else
                rsa.TouchFromPublicKeyInPkcs1(publicKey, out _);
#endif
                break;

            case RsaKeyFormat.Pkcs8:
#if NETCOREAPP3_1 || NETSTANDARD2_1
                rsa.ImportRSAPublicKey(BaseConv.FromBase64(publicKey), out _);
#else
                rsa.TouchFromPublicKeyInPkcs8(publicKey, out _);
#endif
                break;
            }
        }
    }
예제 #20
0
 internal Sm2Key(ECPoint publicKey, BigInteger privateKey)
 {
     PublicKey  = BaseConv.ToBase64(publicKey.GetEncoded());   //Hex.Encode(publicKey.GetEncoded()).GetString(encoding.SafeEncodingValue()).ToUpper();
     PrivateKey = BaseConv.ToBase64(privateKey.ToByteArray()); //Hex.Encode(privateKey.ToByteArray()).GetString(encoding.SafeEncodingValue()).ToUpper();
 }