Get certified for free when you join Fabric Data Days 2026 and dive into Fabric, Power BI, SQL, AI, and other essential data skills.
Join nowData Days is here! Join us now for 60+ days of learning, challenges, and connection. Learn more
I am getting a "DMTS_InvalidEncryptionAlgorithmError" code when I try to programmatically create a CosmosDB datasource in Power BI using the REST APIs.
Here's the code I try to use, minus credentials
Hi @bohara2000 ,
You need to encrypt the credentials and call the API due to the PowerBI security.
Please see the below reference
https://docs.microsoft.com/en-us/power-bi/developer/encrypt-credentials
The below C# code helps you to do the encryption
public static class AsymmetricKeyEncryptionHelper
{
private const int SegmentLength = 85;
private const int EncryptedLength = 128;
public static string EncodeCredentials(string credentials, string publicKeyExponent, string publicKeyModulus)
{
using (RSACryptoServiceProvider rsa = new RSACryptoServiceProvider(EncryptedLength * 8))
{
var parameters = rsa.ExportParameters(false);
parameters.Exponent = Convert.FromBase64String(publicKeyExponent);
parameters.Modulus = Convert.FromBase64String(publicKeyModulus);
rsa.ImportParameters(parameters);
return Encrypt(credentials, rsa);
}
}
private static string Encrypt(string plainText, RSACryptoServiceProvider rsa)
{
byte[] plainTextArray = Encoding.UTF8.GetBytes(plainText);
// Split the message into different segments, each segment's length is 85. So the result may be 85,85,85,20.
bool hasIncompleteSegment = plainTextArray.Length % SegmentLength != 0;
int segmentNumber = (!hasIncompleteSegment) ? (plainTextArray.Length / SegmentLength) : ((plainTextArray.Length / SegmentLength) + 1);
byte[] encryptedData = new byte[segmentNumber * EncryptedLength];
int encryptedDataPosition = 0;
for (var i = 0; i < segmentNumber; i++)
{
int lengthToCopy;
if (i == segmentNumber - 1 && hasIncompleteSegment)
lengthToCopy = plainTextArray.Length % SegmentLength;
else
lengthToCopy = SegmentLength;
var segment = new byte[lengthToCopy];
Array.Copy(plainTextArray, i * SegmentLength, segment, 0, lengthToCopy);
var segmentEncryptedResult = rsa.Encrypt(segment, true);
Array.Copy(segmentEncryptedResult, 0, encryptedData, encryptedDataPosition, segmentEncryptedResult.Length);
encryptedDataPosition += segmentEncryptedResult.Length;
}
return Convert.ToBase64String(encryptedData);
}
}
Don't miss out on Data Days, June 15 through August 7. Learn Fabric, Power BI, SQL, AI and more.
Check out the May 2026 Power BI update to learn about new features.
| User | Count |
|---|---|
| 2 | |
| 2 | |
| 1 | |
| 1 | |
| 1 |