当前位置: 首页 > 知识库问答 >
问题:

如何在. net核心中加密和解密字符串

李谦
2023-03-14

我将我的. net webapi移植到. net core webapi。在我使用的旧代码中

Cryptographer.CreateHash("SHA1CryptoServiceProvider", strPass);

为此,我使用了库Microsoft.Practices.EnterpriseLibrary.Security.Cryptography

但在移植到.net core之后,我面临的问题是:

{System.MissingMethodException: Method not found: 'System.AppDomainSetup System.AppDomain.get_SetupInformation()'.
   at Microsoft.Practices.EnterpriseLibrary.Common.Configuration.SystemConfigurationSource.SafeGetCurrentConfigurationFile()
   at Microsoft.Practices.EnterpriseLibrary.Common.Configuration.ConfigurationSourceFactory.Create()
   at Microsoft.Practices.EnterpriseLibrary.Common.Configuration.EnterpriseLibraryContainer.SetCurrentContainerIfNotSet()
   at Microsoft.Practices.EnterpriseLibrary.Security.Cryptography.Cryptographer.GetHashProvider(String hashInstance)
   at Microsoft.Practices.EnterpriseLibrary.Security.Cryptography.Cryptographer.CreateHash(String hashInstance, String plaintext)
   at Social27Bot.DAL.Data.Mappers.Security.EncryptPass(String strPass) 

对此的解决方案是什么?

共有2个答案

徐英锐
2023-03-14

试试这个,

using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Http;
using Microsoft.VisualBasic;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using DevExtremeAspNetCoreApp07052019.App_Start;


namespace DevExtremeAspNetCoreApp07052019.App_Start
{
    public class HelperClass
    {

        public static char Mid(string param, int startIndex, int length)
        {
            Char result = Convert.ToChar(param.Substring(startIndex, length));
            return result;
        }
        public static string Decrypt(string icText)
        {
            int icLen;
            string icNewText = "";
            char icChar;
            //icChar = '' ;
            icLen = icText.Length;
            for (int i = 0; i <= icLen-1; i++)
            {
                icChar = Mid(icText, i, 1);
                switch (Strings.AscW(icChar))
                {
                    case object _ when 192 <= Strings.AscW(icChar) && Strings.AscW(icChar) <= 217:
                        {
                            icChar = Strings.ChrW(Strings.AscW(icChar) - 127);
                            break;
                        }

                    case object _ when 218 <= Strings.AscW(icChar) && Strings.AscW(icChar) <= 243:
                        {
                            icChar = Strings.ChrW(Strings.AscW(icChar) - 121);
                            break;
                        }

                    case object _ when 244 <= Strings.AscW(icChar) && Strings.AscW(icChar) <= 253:
                        {
                            icChar = Strings.ChrW(Strings.AscW(icChar) - 196);
                            break;
                        }

                    case 32:
                        {
                            icChar = Strings.ChrW(32);
                            break;
                        }
                }
                icNewText = icNewText + icChar;
            }
           // icNewText = Microsoft.VisualBasic.StrReverse(icNewText);
            return (icNewText);
        }
        public static string Encrypt(string icText)
        {
            int icLen;
            string icNewText = "";
            char icChar;
            icLen = icText.Length;
            for (int i = 1; i <= icLen; i++)
            {
                icChar = Mid(icText, i, 1); 
                switch (Strings.AscW(icChar))
                {
                    case object _ when 65 <= Strings.AscW(icChar) && Strings.AscW(icChar) <= 90:
                        {
                            icChar = Strings.ChrW(Strings.AscW(icChar) + 127);
                            break;
                        }

                    case object _ when 97 <= Strings.AscW(icChar) && Strings.AscW(icChar) <= 122:
                        {
                            icChar = Strings.ChrW(Strings.AscW(icChar) + 121);
                            break;
                        }

                    case object _ when 48 <= Strings.AscW(icChar) && Strings.AscW(icChar) <= 57:
                        {
                            icChar = Strings.ChrW(Strings.AscW(icChar) + 196);
                            break;
                        }

                    case 32:
                        {
                            icChar = Strings.ChrW(32);
                            break;
                        }
                }
                icNewText = icNewText + icChar;
            }
            return (icNewText);
        }

        public static string ReplaceFirstOccurrence(string Source, string Find, string Replace)
        {
            string result = "";
            int Place = Source.IndexOf(Find);
            if (Place != -1)
            {
                result = Source.Remove(Place, Find.Length).Insert(Place, Replace);
            }
            else
            {
                result = Source;
            }
            return result;
        }

        public static string SQLString(string sStrings, Boolean Trim = true)
        {
            //Get
            //{

            if (Trim)
            {
                if (sStrings != null && sStrings.Trim() != "")
                    return ReplaceFirstOccurrence(sStrings.Trim(), "'", "''");
                else
                    return "";
            }
            else if (sStrings.Trim() != "")
                return ReplaceFirstOccurrence(sStrings, "'", "''");
            else
                return "";
            //}
        }

    }
}
太叔何平
2023-03-14

长话短说,EntLib是十多年前创建的一个遗留库。不要使用它。它从来没有打算在.NETCore中使用,显然,也从来没有升级过以使用它。使用KeyDerivation。而是Pbkdf2。

在此特定情况下,您根本不能使用 EntLib,因为它会尝试使用不存在的属性“应用程序域.安装程序信息”。类在 .NET Core 的第一个版本中被删除,并添加回 i .NET Core 2.0。即使是现在,它也不能提供所有成员,包括安装程序信息

正如文档页面所解释的,这个属性将被添加回。NET Core 3.0,将于9月发布。

真正的解决方案是首先不使用此类代码,并使用 ASP.NET 核心的身份来存储密码。

像这样使用SHA1对密码进行哈希处理是微不足道的,可以在几分钟内破解,如果不是更少的话。很久以前,当人们曾经创建彩虹表时,预先计算出所有密码组合的SHA1哈希值,只需查找哈希即可找到密码。如今,暴力破解它可能比搜索一大堆哈希值更快。

ASP.NET总是提供更安全的密码散列和存储,包括盐析和多次散列迭代。在ASP.NETWeb窗体和旧版本的MVC中,使用了盐析和至少1000次散列迭代

ASP。NET Core Identity还提供安全的哈希和存储。使用它是最简单、最安全的选择。它是开源的,所以即使不能使用它,也很容易检查它是如何散列密码的。

哈希密码 V3 方法使用 ASP.NET 核心的密钥提取类对用户提供的密码进行哈希处理。代码非常简单。从本质上讲,它是对密钥分解.Pbkdf2 的调用,其中包含一个 16 字节的盐,该盐返回一个 32 字节的哈希缓冲区。

byte[] salt = new byte[16];
rng.GetBytes(salt);
byte[] subkey = KeyDerivation.Pbkdf2(password, salt, KeyDerivationPrf.HMACSHA256, 
                                     iterCount, 32);

代码的其余部分将哈希算法 ID、哈希字节、迭代计数和 salt 打包到单个字节数组中,以便存储在表中。这些属性可以存储在表的不同列中,但将所有内容放在单个byte[]数组中更方便。

VerifyHashedPasswordV3稍后读取存储的缓冲区,提取属性并对提供的密码进行哈希处理,然后再检查存储和计算的哈希

 类似资料:
  • 问题内容: 我的意思是: 也许像: 在PHP中,您该怎么做? 尝试使用 ,但对我不起作用。 问题答案: 更新 PHP 7就绪版本。它使用PHP OpenSSL库中的openssl_encrypt函数。

  • 我的意思是: 可能是这样的: null 尝试使用,但对我不起作用。

  • 我知道有几个与此相关的问题,但是大多数答案都提供了.NET4.0及以上版本的解决方案。对于我的用途,我必须以.NET3.5为目标。我想简单地加密和解密一个字符串存储在一个文件中,所讨论的文本不是敏感的用户/个人信息。

  • 本文向大家介绍.net core使用MD5加密解密字符串,包括了.net core使用MD5加密解密字符串的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了.net core使用MD5加密解密字符串的具体代码,供大家参考,具体内容如下 调用加密 解密看效果 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持呐喊教程。

  • 我感兴趣的是构建一个个人使用的小应用程序,它将使用JavaScript在客户端加密和解密信息。加密的信息将存储在服务器上的数据库中,但不会存储解密的版本。 它不一定要是超级duper安全的,但我想使用一个当前未中断的算法。 理想情况下我可以做一些 生成编码字符串,以及类似于 以后再解码。 到目前为止,我已经看到了以下内容:http://bitwiseshiftleft.github.io/sjcl

  • 使用lib中的模块在python中解密和加密字符串。最简单的方法 现在我想解密我之前输入的字符串。。