Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/266.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/16.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# 如何将加密密码保存在应用程序中?_C#_.net_Security_.net 4.0 - Fatal编程技术网

C# 如何将加密密码保存在应用程序中?

C# 如何将加密密码保存在应用程序中?,c#,.net,security,.net-4.0,C#,.net,Security,.net 4.0,我有一个接受许可证加密密钥的应用程序。因此,这个应用程序应该保存在字符串加密密码中,以便解密该字符串并获取一些数据 将字符串加密密码保存在应用程序内部的最佳方法是什么?如果用户试图破解密码,那么应该非常困难 有线索吗 谢谢你 public static string Encrypt(string textToEncrypt, string encryptionPassword) { var algorithm = GetAlgorithm(encryptionPasswo

我有一个接受许可证加密密钥的应用程序。因此,这个应用程序应该保存在
字符串加密密码
中,以便解密该字符串并获取一些数据

字符串加密密码
保存在应用程序内部的最佳方法是什么?如果用户试图破解密码,那么应该非常困难

有线索吗

谢谢你

public static string Encrypt(string textToEncrypt, string encryptionPassword)
{
            var algorithm = GetAlgorithm(encryptionPassword);

            byte[] encryptedBytes;
            using (ICryptoTransform encryptor = algorithm.CreateEncryptor(algorithm.Key, algorithm.IV))
            {
                byte[] bytesToEncrypt = Encoding.UTF8.GetBytes(textToEncrypt);
                encryptedBytes = InMemoryCrypt(bytesToEncrypt, encryptor);
            }
            return Convert.ToBase64String(encryptedBytes);
}

public static string Decrypt(string encryptedText, string encryptionPassword)
{
            var algorithm = GetAlgorithm(encryptionPassword);

            byte[] descryptedBytes;
            using (ICryptoTransform decryptor = algorithm.CreateDecryptor(algorithm.Key, algorithm.IV))
            {
                byte[] encryptedBytes = Convert.FromBase64String(encryptedText);
                descryptedBytes = InMemoryCrypt(encryptedBytes, decryptor);
            }
            return Encoding.UTF8.GetString(descryptedBytes);
}
符合以下条件:

表示应保密的文本。文本在使用时为了隐私而加密,在不再需要时从计算机内存中删除

此外:

SecureString
对象类似于
String
对象,因为它有一个文本值。但是,
SecureString
对象的值是自动加密的,可以修改,直到应用程序将其标记为只读,并且可以由应用程序或.NET Framework垃圾收集器从计算机内存中删除

初始化实例或修改值时,
SecureString
实例的值会自动加密。应用程序可以通过调用
MakeReadOnly
方法使实例不可变并防止进一步修改


但是,请注意,aA确定有足够的用户将设法读取此类密码-这可能需要时间和精力,但也可能符合以下条件:

表示应保密的文本。文本在使用时为了隐私而加密,在不再需要时从计算机内存中删除

此外:

SecureString
对象类似于
String
对象,因为它有一个文本值。但是,
SecureString
对象的值是自动加密的,可以修改,直到应用程序将其标记为只读,并且可以由应用程序或.NET Framework垃圾收集器从计算机内存中删除

初始化实例或修改值时,
SecureString
实例的值会自动加密。应用程序可以通过调用
MakeReadOnly
方法使实例不可变并防止进一步修改


但是请注意,aA确定有足够的用户将设法读取这样的密码-这可能需要时间和精力,但也有可能

您应该尝试使用安全字符串。它会自动加密内存中的字符串值

您应该尝试使用安全字符串。它会自动加密内存中的字符串值

存储密钥以防止黑客攻击的最佳答案是:你没有

请参阅以获取替代方案

该解决方案称为部分密钥验证系统,因为您的软件从不测试完整密钥。由于您的应用程序不包含测试密钥每个部分的代码,因此破解程序不可能仅通过分解可执行代码来构建有效的密钥生成器

该系统不是完全防止裂缝的方法。破解程序仍然可以编辑您的可执行文件以跳过验证代码。但是这样的漏洞只适用于一个特定的版本,我将提出一些技巧,使他们的工作更难成功完成


存储密钥以防止黑客攻击的最佳答案是:您不需要

请参阅以获取替代方案

该解决方案称为部分密钥验证系统,因为您的软件从不测试完整密钥。由于您的应用程序不包含测试密钥每个部分的代码,因此破解程序不可能仅通过分解可执行代码来构建有效的密钥生成器

该系统不是完全防止裂缝的方法。破解程序仍然可以编辑您的可执行文件以跳过验证代码。但是这样的漏洞只适用于一个特定的版本,我将提出一些技巧,使他们的工作更难成功完成


一个有足够决心的用户将设法读取这样一个密码-这可能需要时间和精力,但这是可能的。另外-请参阅。@Oded!但是我不能使用.NET 4.5
SecureString
自从.NET 2.0以来就一直存在-该版本有一个下拉列表。一个有足够决心的用户将设法读取这样的密码-这可能需要时间和精力,但这是可能的。另外-请参阅。@Oded Than you!但是我不能使用.NET 4.5
SecureString
自从.NET 2.0以来就已经存在了-有一个用于.Cool版本的下拉列表。但我计划永远像硬编码一样保留
字符串加密密码。所以我猜应该使用一些静态数组来保存它的字符等等。。。所以当应用程序可以检测到有一个新的许可证字符串时,它应该自动解密它…酷。但我计划永远像硬编码一样保留
字符串加密密码。所以我猜应该使用一些静态数组来保存它的字符等等。。。所以,当应用程序能够检测到有一个新的许可证字符串时,它应该自动解密它。。。