VS2017 15.5.1 SSDT安全性从TripleDES变为AES256-CBC?

时间:2018-01-09 18:47:31

标签: algorithm security encryption ssis

我正在为SSIS建立CI管道,第一步是自动创建ISPAC部署包。我正在使用以下代码:https://github.com/rtumaykin/ssis-build创建ssisbuild.exe。可执行文件从dtproj读取XML,使用CrptoAPIs为TripleDES解密安全信息,如文档here

这两行代码

var passwordDeriveBytes = new PasswordDeriveBytes(password, rgbSalt);

 cryptoServiceProvider.Key = passwordDeriveBytes.CryptDeriveKey("TripleDES", "SHA1", 192, cryptoServiceProvider.IV);

从dtproj文件提供密码和salt(使用Convert.FromBase64String(saltXMLAttributeNode.Value)转换为字节数组

TripleDES转换生成例外: “指定的初始化{IV}与此算法的块大小不匹配。”

查看VS2017 15.5 dtproj XML我发现这一节:

  

SSIS:算法= “http://www.w3.org/2001/04/xmlenc#aes256-cbc” >

表明DTPROJ加密算法现在是aes256-cbc。

事实上,更改代码使用:

   cryptoServiceProvider.Key = passwordDeriveBytes.CryptDeriveKey("AES", "SHA1", 256, cryptoServiceProvider.IV);

删除错误。 但下一行:

        var passwordDeriveBytes = new PasswordDeriveBytes(password, rgbSalt);

        cryptoServiceProvider.Key = passwordDeriveBytes.CryptDeriveKey("AES", "SHA1", 256, cryptoServiceProvider.IV)

生成新的非描述性错误:

  

“对象标识符(OID)未知”

使用System.Security.Cryptography.Aes的AESCrptoServiceProvder类中的示例重写解密过程

使用:

static string DecryptStringFromBytesAes(byte[] ciphertext, byte[] key, byte[] aesiv)
        {
            if (ciphertext == null || ciphertext.Length <= 0)
                throw new ArgumentNullException("cypherText");
            if (key == null || key.Length <=0)
                throw new ArgumentNullException("Key");
            if (aesiv == null || aesiv.Length <=0)
                throw new ArgumentNullException("AESIV");
            string plaintext = null;
            using (AesCryptoServiceProvider aesAlg = new AesCryptoServiceProvider())
            {
                aesAlg.Key = key;
                aesAlg.IV = aesiv;
                ICryptoTransform decryptor = aesAlg.CreateDecryptor(aesAlg.Key, aesAlg.IV);
                using (MemoryStream msDecrypt = new MemoryStream(ciphertext))
                {
                    using (CryptoStream csDecrypt = new CryptoStream(msDecrypt, decryptor, CryptoStreamMode.Read))
                    {
                        using (StreamReader srDecrtypt = new StreamReader(csDecrypt))
                        {
                            plaintext = srDecrtypt.ReadToEnd();
                        }
                    }
                }
            }

            return plaintext;
        }

其中Key =来自dtproj的Salt值产生错误

  

“指定的密钥不是此算法的有效大小。”

在线上加载密钥时:

 using (AesCryptoServiceProvider aesAlg = new AesCryptoServiceProvider())
            {
                aesAlg.Key = key;

我要么为密钥提供不正确的值,要么使用不正确的CryptoServiceProvider。

有人知道在VS2017 SSDT 15.5.1中如何更改加密?

0 个答案:

没有答案