Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/271.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 通过密码和SALT在.NETMF中使用密钥和IV生成器进行加密_C#_.net_Encryption_.net Micro Framework_.net Gadgeteer - Fatal编程技术网

C# 通过密码和SALT在.NETMF中使用密钥和IV生成器进行加密

C# 通过密码和SALT在.NETMF中使用密钥和IV生成器进行加密,c#,.net,encryption,.net-micro-framework,.net-gadgeteer,C#,.net,Encryption,.net Micro Framework,.net Gadgeteer,我正在实现一个.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 =

我正在实现一个.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中存在的任何函数,如Rfc2898DeriveBytes或RandomNumberGenerator。因此,我无法找到从密码和SALT派生Key&IV的方法

2-假设我们解决了问题1,我不能在每次加密/解密时使用随机密钥和IV,因为gadgeteer没有internet连接,因此无法以安全的方式将密钥和IV发送到my.NET Framework PC。所以我想另一种解决方案:如果我从密码SALT派生key&IV,并且我的加密和解密工具都使用相同的密码SALT,那么我可以处理它。是的,我听到的声音不使用相同的IV等进行多个加密。。但由于成本和其他问题,我必须避免将gadgeteer连接到wifi。在这种情况下,这是一种安全的方法,还是需要改进,如公钥和私钥实现等。?怎么做

我很乐意接受任何建议,谢谢


Murat

我没有使用.net微框架。但是,api清单中有一个名为的随机数生成器。Rfc2898DeriveBytes只是使用Hmac-Sha1的PBKDF2实现,存在一个支持Hmac-Sha1 see算法的类。它非常简单。

我没有使用.net Micro Framework。但是,api清单中有一个名为的随机数生成器。Rfc2898DeriveBytes只是使用Hmac-Sha1的PBKDF2实现,存在一个支持Hmac-Sha1 see算法的类,它非常简单