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

问题描述 投票:2回答:1

我正在努力为SSIS建立CI管道,第一步是自动创建ISPAC部署软件包。我正在使用以下代码:https://github.com/rtumaykin/ssis-build,该代码创建ssisbuild.exe。可执行文件从dtproj读取XML,使用文档中here

的TripleDES使用CrptoAPI解密安全信息。

这两行代码

var passwordDeriveBytes = new PasswordDeriveBytes(password, rgbSalt);

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

从dtproj文件中提供密码和盐(已通过Convert.FromBase64String(saltXMLAttributeNode.Value转换为字节数组]

TripleDES转换会生成异常:“指定的初始化{IV}与该算法的块大小不匹配。”

查看VS2017 15.5 dtproj XML,我发现此部分:

SSIS:Algorithm =“ 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;
        }

[其中键= dtproj中的Salt值产生错误

“指定的密钥对于该算法而言不是有效的大小。”

在行中加载密钥时:

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

我为密钥提供了不正确的值,或者使用了不正确的CryptoServiceProvider。

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

algorithm security encryption ssis
1个回答
0
投票

您设法成功了吗?我正在尝试使用VS2019做同样的事情。

© www.soinside.com 2019 - 2024. All rights reserved.