「暗号化するデータの長さが無効です」という例外が発生します。これは、入力データの長さがブロック サイズの倍数ではないためだと理解しています。私はまだこの暗号化に慣れていないので、いくつか質問があります。
デフォルトのブロックサイズは 128 ですよね? これは 256 ブロック サイズをサポートしていません。送信先のベンダーが 256 ブロック サイズを必要とする場合、どうすれば 256 ブロック サイズを送信できますか?
ベンダーもパディングを必要としないため、パディングを調整せずにデータを正しい長さにするにはどうすればよいですか?
string currentTime = DateTime.UtcNow.ToString("yyyyMMddHHmmss");
string userId = "";
string baseURL = ConfigurationManager.AppSettings["baseURL"];
string config = ConfigurationManager.AppSettings["keyType"];
string key = "";
//sets the base URL to use, parameters will still need to be configured.
if (config == "Q")
key = "KEY";
else if (config == "P")
key = "KEY";
if(Request.Headers.AllKeys.Contains("memberof"))
{
if(Request.Headers["memberof"].Contains("GROUP-NAME"))
{
if (Request.Headers.AllKeys.Contains("user"))
userId = "tvs2"; //will come from header always 4 characters
else
return;
string[] keyArray = key.Split(',');
sbyte[] sBytes = new sbyte[keyArray.Length];
for (int i = 0; i < keyArray.Length; i++)
{
sBytes[i] = Convert.ToSByte(keyArray[i]);
}
byte[] bytes = (byte[])(Array)sBytes;
AesManaged tdes = new AesManaged();
tdes.Key = bytes;
tdes.Mode = CipherMode.CBC;
tdes.Padding = PaddingMode.None;
ICryptoTransform crpyt = tdes.CreateEncryptor();
byte[] userData = Encoding.UTF8.GetBytes(userId);
byte[] dateData = Encoding.UTF8.GetBytes(currentTime);
byte[] userCipher = crpyt.TransformFinalBlock(userData, 0, userData.Length);
byte[] dateCipher = crpyt.TransformFinalBlock(dateData, 0, dateData.Length);
string encryptedUser = Convert.ToBase64String(userCipher);
string encrpytedDate = Convert.ToBase64String(dateCipher);
string url = baseURL
+ "username="
+ encryptedUser + "×tamp="
+ encrpytedDate;
Response.Redirect(url);
}
}