예제 #1
0
        public SQLServerCryptoAlgorithm(SQLServerCryptoVersion sqlCryptoVersion)
        {
            Version = sqlCryptoVersion;
            switch (Version)
            {
            case SQLServerCryptoVersion.V1:
                Hash      = SHA1.Create();
                Symmetric = TripleDES.Create();
                KeySize   = 16;
                break;

            case SQLServerCryptoVersion.V2:
                Hash      = SHA256.Create();
                Symmetric = Aes.Create();
                KeySize   = 32;
                break;

            default:
                throw new Exception("Unsupported SQLServerCryptoVersion");
            }
            Symmetric.Padding = PaddingMode.PKCS7;
            Symmetric.Mode    = CipherMode.CBC;
        }
예제 #2
0
        public static HexString EncryptByPassPhrase(string passphrase, string cleartext, int add_authenticator, string authenticator, SQLServerCryptoVersion sqlServerCryptoVersion)
        {
            var sqlServerCryptoAlgorithm = new SQLServerCryptoAlgorithm(sqlServerCryptoVersion);

            sqlServerCryptoAlgorithm.SetKeyFromPassPhrase(passphrase);

            byte[] header = new SQLServerCryptoHeader()
            {
                Version = sqlServerCryptoVersion,
                InitializationVector = sqlServerCryptoAlgorithm.Symmetric.IV
            };
            var sqlServerCryptoMessage = new SQLServerCryptoMessage()
            {
                AddAuthenticator = add_authenticator > 0,
                Authenticator    = authenticator
            };

            sqlServerCryptoMessage.CreateFromClearText(cleartext);

            byte[] message = sqlServerCryptoMessage;

            var encryptedMessage = sqlServerCryptoAlgorithm.Symmetric
                                   .CreateEncryptor()
                                   .TransformFinalBlock(message, 0, message.Length);

            return(new HexString(header.Concat(encryptedMessage).ToArray()));
        }
예제 #3
0
 public static HexString EncryptByPassPhrase(string passphrase, string cleartext, SQLServerCryptoVersion sqlServerCryptoVersion)
 => EncryptByPassPhrase(passphrase, cleartext, 0, string.Empty, sqlServerCryptoVersion);
예제 #4
0
 public SQLServerCryptoHeader(SQLServerCryptoVersion sqlServerCryptoVersion = SQLServerCryptoVersion.V1)
 => Version = sqlServerCryptoVersion;