gpt4 book ai didi

c# - TripleDES TransformFinalBlock 偶尔会给出 'Bad Data. ' 错误

转载 作者:行者123 更新时间:2023-12-01 22:28:33 25 4
gpt4 key购买 nike

我有以下代码:

public static string PerformEncryption(string text, string uniqueKey, bool encrypt = false)
{
byte[] textBytes = encrypt ? Encoding.UTF8.GetBytes(text) : Convert.FromBase64String(text);
byte[] resultArray;
var staticKey = Convert.FromBase64String(ConfigReader.SecretKey);
using (TripleDESCryptoServiceProvider tDes = new TripleDESCryptoServiceProvider())
{
tDes.Mode = CipherMode.ECB;
tDes.Padding = PaddingMode.PKCS7;
tDes.Key = GenerateTripleDesKey(uniqueKey, staticKey);     
CTransform = encrypt ? tDes.CreateEncryptor() : tDes.CreateDecryptor();
resultArray = CTransform.TransformFinalBlock(textBytes, 0, textBytes.Length);
tDes.Clear();
}
if (encrypt)
return Convert.ToBase64String(resultArray, 0, resultArray.Length);

return Encoding.UTF8.GetString(resultArray);
}



private static byte[] GenerateTripleDesKey(string uniqueKey, byte[] staticKey)
{
byte[] keyArray;
using (SHA512CryptoServiceProvider hash = new SHA512CryptoServiceProvider())
keyArray = hash.ComputeHash(Encoding.UTF8.GetBytes(string.Format("{0}{1}", uniqueKey, staticKey)));

byte[] trimmedBytes = new byte[24];
Buffer.BlockCopy(keyArray, 0, trimmedBytes, 0, 24);
return trimmedBytes;
}
PerformEncryption用作辅助方法来执行字符串的加密/解密。还为任一操作提供了 key 。

它用于由 Android 和 iOS 设备中的移动应用程序使用的 Web API 应用程序。

大部分使用 Android 的用户都会发生错误数据错误,而在 iOS 上发生此错误的几率要小得多。我在类似的移动设备上进行的任何测试都不会产生问题。

重现错误的唯一方法是在加密后修改单元测试中的字符串值。

Web API 使用 Async/Await,所以我不确定这是否与它有关?

上面的代码有什么我遗漏的或者是不好的做法吗?

我无权访问发送到服务器的原始请求,因此我无法确定加密值的内容是否在请求中附加了来自 Android/iOS 的狡猾字符?

我的其他想法是:
我应该切换使用 UTF8 getbytes()如果这导致 iOS 和 android 环境出现问题,则转换为 ASCII 等效帮助程序类

我是否应该切换到完全像 AES 一样使用差异算法。

最佳答案

  • 3DES 不应用于新代码,而应使用 AES。
  • 不要使用 ECB 模式,它是不安全的,请参阅 ECB mode ,向下滚动到企鹅。而是使用带有随机 IV 的 CBC 模式,只需在加密数据前加上 IV 以用于解密。
  • PBKDF2 比简单的散列甚至加盐散列更安全。主要区别在于迭代以花费更多时间来计算 key ,100,000 次迭代对于 PBKDF2 来说很常见。
  • UTF-8 比 ASCII 更受青睐,因为 ASCII 太有限。
  • 关于c# - TripleDES TransformFinalBlock 偶尔会给出 'Bad Data. ' 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41229957/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com