Skip to content

Commit 258e1da

Browse files
authored
Merge pull request #47 from Corsinvest/fix-security-logs
Fix: Mask sensitive parameters in debug logs
2 parents 662e1e5 + dd82b6e commit 258e1da

File tree

2 files changed

+471
-433
lines changed

2 files changed

+471
-433
lines changed

src/Corsinvest.ProxmoxVE.Api.Console/Helpers/StringHelper.cs

Lines changed: 58 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -8,52 +8,83 @@
88

99
namespace Corsinvest.ProxmoxVE.Api.Console.Helpers;
1010

11-
/// <summary>
12-
/// String helper
13-
/// </summary>
1411
internal static class StringHelper
1512
{
16-
/// <summary>
17-
/// Decrypt
18-
/// </summary>
19-
/// <param name="data"></param>
20-
/// <param name="key"></param>
21-
/// <returns></returns>
13+
private const string VERSION_PREFIX = "v2:";
14+
2215
public static string Decrypt(string data, string key)
2316
{
24-
var dataArray = Convert.FromBase64String(data);
17+
if (data.StartsWith(VERSION_PREFIX))
18+
{
19+
// New format with version prefix - uses CBC mode with IV
20+
var actualData = data[VERSION_PREFIX.Length..];
21+
var dataArray = Convert.FromBase64String(actualData);
2522

26-
using var tDes = TripleDES.Create();
27-
tDes.Mode = CipherMode.ECB;
28-
tDes.Key = Encoding.UTF8.GetBytes(key);
29-
tDes.Padding = PaddingMode.PKCS7;
23+
// Extract IV from the beginning of the data
24+
var iv = new byte[8];
25+
Array.Copy(dataArray, 0, iv, 0, 8);
3026

31-
using var cTransform = tDes.CreateDecryptor();
32-
var resultArray = cTransform.TransformFinalBlock(dataArray, 0, dataArray.Length);
33-
tDes.Clear();
27+
// Extract encrypted content
28+
var encryptedData = new byte[dataArray.Length - 8];
29+
Array.Copy(dataArray, 8, encryptedData, 0, dataArray.Length - 8);
30+
31+
using var tDes = TripleDES.Create();
32+
tDes.Mode = CipherMode.CBC;
33+
tDes.Key = Encoding.UTF8.GetBytes(key);
34+
tDes.IV = iv;
35+
tDes.Padding = PaddingMode.PKCS7;
36+
37+
using var cTransform = tDes.CreateDecryptor();
38+
var resultArray = cTransform.TransformFinalBlock(encryptedData, 0, encryptedData.Length);
39+
tDes.Clear();
40+
41+
return Encoding.UTF8.GetString(resultArray);
42+
}
43+
else
44+
{
45+
// Old format without version prefix - uses ECB mode
46+
#pragma warning disable CA5351 // Accettabile per retrocompatibilità con formato dati esistenti
47+
var dataArray = Convert.FromBase64String(data);
3448

35-
return Encoding.UTF8.GetString(resultArray);
49+
using var tDes = TripleDES.Create();
50+
tDes.Mode = CipherMode.ECB;
51+
tDes.Key = Encoding.UTF8.GetBytes(key);
52+
tDes.Padding = PaddingMode.PKCS7;
53+
54+
using var cTransform = tDes.CreateDecryptor();
55+
var resultArray = cTransform.TransformFinalBlock(dataArray, 0, dataArray.Length);
56+
tDes.Clear();
57+
58+
#pragma warning restore CA5351
59+
return Encoding.UTF8.GetString(resultArray);
60+
}
3661
}
3762

38-
/// <summary>
39-
/// Encrypt
40-
/// </summary>
41-
/// <param name="data"></param>
42-
/// <param name="key"></param>
43-
/// <returns></returns>
4463
public static string Encrypt(string data, string key)
4564
{
4665
var dataArray = Encoding.UTF8.GetBytes(data);
4766

4867
using var tDes = TripleDES.Create();
49-
tDes.Mode = CipherMode.ECB;
68+
tDes.Mode = CipherMode.CBC;
5069
tDes.Key = Encoding.UTF8.GetBytes(key);
70+
tDes.GenerateIV();
5171
tDes.Padding = PaddingMode.PKCS7;
5272

5373
using var cTransform = tDes.CreateEncryptor();
5474
var resultArray = cTransform.TransformFinalBlock(dataArray, 0, dataArray.Length);
55-
tDes.Clear();
5675

57-
return Convert.ToBase64String(resultArray, 0, resultArray.Length);
76+
// Combine IV and encrypted data
77+
var combined = new byte[tDes.IV.Length + resultArray.Length];
78+
Array.Copy(tDes.IV, 0, combined, 0, tDes.IV.Length);
79+
Array.Copy(resultArray, 0, combined, tDes.IV.Length, resultArray.Length);
80+
81+
tDes.Clear();
82+
return VERSION_PREFIX + Convert.ToBase64String(combined, 0, combined.Length);
5883
}
84+
85+
/// <summary>
86+
/// Get the version prefix used for new encrypted data
87+
/// </summary>
88+
/// <returns></returns>
89+
public static string GetVersionPrefix() => VERSION_PREFIX;
5990
}

0 commit comments

Comments
 (0)