我正在努力为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中如何更改加密吗?
您设法成功了吗?我正在尝试使用VS2019做同样的事情。