我正在为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中如何更改加密?