gpt4 book ai didi

c# - 使用 .NETMF 中的密码和 SALT 生成 key 和 IV 生成器进行加密

转载 作者:太空宇宙 更新时间:2023-11-03 16:24:49 25 4
gpt4 key购买 nike

我正在实现一个 .NET Micro Framework 应用程序并且我有如下代码:

public static void Main()
{
string data = "Here is some text to encrypt.";

AesCryptoServiceProvider csp = new AesCryptoServiceProvider();
csp.GenerateKey();
csp.GenerateIV();

CryptoKey k = csp.Key;
byte[] iv = csp.IV;

byte[] key = k.ExportKey(true);

AesCryptoServiceProvider csp2 = new AesCryptoServiceProvider();

byte[] enc = AesEncrypt(UTF8Encoding.UTF8.GetBytes(data), key, iv);
byte[] dec = AesDecrypt(enc, key, csp.IV);
char[] c = UTF8Encoding.UTF8.GetChars(dec);
string decodedStr = new string(c);
Debug.Print("\n dec: " + decodedStr );
}

public static byte[] AesEncrypt(byte[] data, byte[] key, byte[] iv)
{
using (AesCryptoServiceProvider csp = new AesCryptoServiceProvider())
{
csp.Key = CryptoKey.ImportKey(csp.Session, key,
CryptoKey.KeyClass.Secret, CryptoKey.KeyType.AES, true);

csp.IV = iv;
using (ICryptoTransform encr = csp.CreateEncryptor())
{
return encr.TransformFinalBlock(data, 0, data.Length);
}
}
}
public static byte[] AesDecrypt(byte[] encryptedData, byte[] key, byte[] iv)
{
using (AesCryptoServiceProvider csp = new AesCryptoServiceProvider())
{
csp.Key = CryptoKey.ImportKey(csp.Session, key,
CryptoKey.KeyClass.Secret, CryptoKey.KeyType.AES, true);
csp.IV = iv;
using (ICryptoTransform decr = csp.CreateDecryptor())
{

return decr.TransformFinalBlock(encryptedData, 0, encryptedData.Length);
}
}
}

我的小工具 (FEZ Hydra) 将加密一些文本。它没有有互联网连接,所以它会通过 OLED 显示器或其他方式输出。我将在 .NET Framework PC 中对其进行解密。现在我有两个问题:

1- 遗憾的是,.NETMF 4.2 RTM (QFE2) 没有任何存在于 .NET Framework 中的函数,例如 Rfc2898DeriveBytesRandomNumberGenerator。因此,我找不到从密码和 SALT 派生 key 和 IV 的方法。

2-(假设我们解决了问题 #1)我不能对每个加密/解密使用随 secret 钥和 IV,因为 gadgeteer 没有互联网连接,无法以安全的方式将 key 和 IV 发送到我的 .NET Framework PC。所以我想到了一个替代解决方案:如果我从密码和 SALT 中导出 key 和 IV,并且我的 gadgeteer(加密)和 PC(解密)都使用相同的密码和 SALT,那么我可以处理它。是的,我听到了声音不要使用相同的 IV 等进行不止一种加密..但我必须不要将 gadgeteer 连接到 wifi,因为成本和其他问题。在这种情况下,这是一种安全的方法吗?还是需要进行大量改进(例如公钥和私钥实现等)?以及如何?

如果有任何建议,我会很高兴,谢谢

穆拉特

最佳答案

我没有使用过.net Micro Framework。但是,api 列表有一个随机数生成器,称为 RNGCryptoServiceProvider . Rfc2898DeriveBytes 只是使用 Hmac-Sha1 的 PBKDF2 实现,并且存在一个 KeyedHashAlgorithm支持 HMAC-SHA1 的类(参见算法 PBKDF2 非常简单)。

关于c# - 使用 .NETMF 中的密码和 SALT 生成 key 和 IV 生成器进行加密,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12898322/

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