首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C#字符串解密

C#字符串解密
EN

Stack Overflow用户
提问于 2020-07-05 04:33:32
回答 3查看 192关注 0票数 0

我想在我的wcf服务中加密。为此,我正在编写一个类来加密和解密字符串。加密看起来很好,并产生了一个加密的字符串,但是在进行解密时,它造成了双重转义错误,不允许或错误401。我在webconfig中添加了以下内容

代码语言:javascript
复制
<security>
  <requestFiltering allowDoubleEscaping="true" />
</security>

现在它给出的错误要么是字符串的长度不正确,要么是短字符串不好的字符串。代码是

加密

代码语言:javascript
复制
static string hash = "mypass@mysitec0m";
        public static string Encrypt(string decrypted)
        {
            byte[] data = UTF8Encoding.UTF8.GetBytes(decrypted);
            using (MD5CryptoServiceProvider mds = new MD5CryptoServiceProvider())
            {
                byte[] keys = mds.ComputeHash(UTF8Encoding.UTF8.GetBytes(hash));
                using (TripleDESCryptoServiceProvider tripDes = new TripleDESCryptoServiceProvider())
                {
                    ICryptoTransform transform = tripDes.CreateEncryptor();
                    byte[] result = transform.TransformFinalBlock(data, 0, data.Length);
                    return Convert.ToBase64String(result);
                }
            }
               
        }

并解密

代码语言:javascript
复制
public static string decrypt(string encrypted)
        {
            byte[] data = Convert.FromBase64String(encrypted);
            using (MD5CryptoServiceProvider mds = new MD5CryptoServiceProvider())
            {
                byte[] keys = mds.ComputeHash(UTF8Encoding.UTF8.GetBytes(hash));
                using (TripleDESCryptoServiceProvider tripDes = new TripleDESCryptoServiceProvider())
                {
                    ICryptoTransform transform = tripDes.CreateDecryptor();
                    byte[] result = transform.TransformFinalBlock(data, 0, data.Length);
                    return UTF8Encoding.UTF8.GetString(result);
                }
            }

        }

为什么错误在那里,我如何解决它。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2020-07-06 07:58:18

这与WCF无关,更像是关于TripleDESCryptoServiceProvider.There的问题是加密和解密代码中的错误。如果未设置IV,则加密模式应使用欧洲央行。默认情况下,CBC.CBC需要设置IV。

这是我修改的代码:

加密

代码语言:javascript
复制
 public static string Encrypt(string decrypted)
        {
          
            byte[] data = UTF8Encoding.UTF8.GetBytes(decrypted);
            using (MD5CryptoServiceProvider mds = new MD5CryptoServiceProvider())
            {
                byte[] keys = mds.ComputeHash(UTF8Encoding.UTF8.GetBytes(hash));
                using (TripleDESCryptoServiceProvider tripDes = new TripleDESCryptoServiceProvider() { 
                Key=keys,
                Mode=CipherMode.ECB
                })
                {
                    ICryptoTransform transform = tripDes.CreateEncryptor();
                    byte[] result = transform.TransformFinalBlock(data, 0, data.Length);
                    return Convert.ToBase64String(result);
                }
            }
        }

解密

代码语言:javascript
复制
 public static string decrypt(string encrypted)
    {
        byte[] data = Convert.FromBase64String(encrypted);
        using (MD5CryptoServiceProvider mds = new MD5CryptoServiceProvider())
        {
            byte[] keys = mds.ComputeHash(UTF8Encoding.UTF8.GetBytes(hash));
            using (TripleDESCryptoServiceProvider tripDes = new TripleDESCryptoServiceProvider()
            {
                Key = keys,
                Mode = CipherMode.ECB
            })
            {
                ICryptoTransform transform = tripDes.CreateDecryptor();
                byte[] result = transform.TransformFinalBlock(data, 0, data.Length);
                return UTF8Encoding.UTF8.GetString(result);
            }
        }

    }
票数 0
EN

Stack Overflow用户

发布于 2020-07-05 14:06:23

您从未用密钥初始化密码,因此您使用的是一个随机密钥作为加密器,而另一个随机密钥用于您的解密器。

取而代之的是使用CreateEncryptor(Byte[], Byte[])方法,对解密器也使用类似的方法。

CreateEncryptor(Byte[], Byte[])...

使用指定的密钥属性和初始化向量(IV)创建对称加密器对象。

票数 1
EN

Stack Overflow用户

发布于 2020-07-05 04:51:03

我建议您使用POST来代替GET。因为加密的字符串可能很长,并且会有许多特殊字符,就像您在问题中提到的那样。

下面是样品。

代码语言:javascript
复制
[OperationContract(Name = "Decrypt")]  
[WebInvoke(Method = "POST",  
UriTemplate = "Decrypt")]  
string Decrypt(string data);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62736867

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档