指定的填充模式对此算法无效 - c# - System.Security.Cryptography

33

本文介绍了指定的填充模式对此算法无效 - c# - System.Security.Cryptography的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着跟版网的小编来一起学习吧!

问题描述

对 c# 非常陌生,目前在解密长密码时遇到问题,错误为

pretty new to c# and currently having a problem decrypting long passwords with an error of

指定的密钥不是该算法的有效大小

Specified key is not a valid size for this algorithm

我知道这与不支持加密密码位长度有关,但不确定如何采用建议的方法来允许这些更长的密码.

I know this has something to do with the encrypted password bits length not being supported but unsure how to go about suggested ways to allow for these longer passwords.

这是我的加密和解密

cipherKey":0123456789abcdef",cipherVector":有点酷"

"cipherKey": "0123456789abcdef", "cipherVector": "somereallycooliv"

using System;
using System.Security.Cryptography;
using System.IO;
using System.Text;

namespace DataApi
{
public class Encryption
{
    private readonly IConfigurationService _configService;


    private const string _vector = "cipherVector";
    private const string _key = "cipherKey";

    public Encryption(IConfigurationService configService)
    {
        _configService = configService;
    }
    public string EncryptString(string text)
    {
        if(string.IsNullOrEmpty(text))
        {
            return "";
        }
        try
        {

      var key = Encoding.UTF8.GetBytes(_configService.Get(_key));
        byte[] IV = Encoding.ASCII.GetBytes(_configService.Get(_vector));

        using (var aesAlg = Aes.Create())
        {
            using (var encryptor = aesAlg.CreateEncryptor(key, IV))
            {
                using (var msEncrypt = new MemoryStream())
                {
                    using (var csEncrypt = new CryptoStream(msEncrypt, encryptor, CryptoStreamMode.Write))
                    using (var swEncrypt = new StreamWriter(csEncrypt))
                    {
                        swEncrypt.Write(text);
                    }

                    var decryptedContent = msEncrypt.ToArray();

                    var result = new byte[IV.Length + decryptedContent.Length];

                    Buffer.BlockCopy(IV, 0, result, 0, IV.Length);
                    Buffer.BlockCopy(decryptedContent, 0, result, IV.Length, decryptedContent.Length);

                    return Convert.ToBase64String(result);
                }
            }
        }
        }
        catch(Exception e) {
             Loggifer.Error("Unable to encrypt string: "+text , e );

            throw e;
        }
    }

    public string DecryptString(string cipherText)
    {
        if(string.IsNullOrEmpty(cipherText))
        {
            return "";
        }
        try
        {
            var fullCipher = Convert.FromBase64String(cipherText);

            byte[] IV = Encoding.ASCII.GetBytes(_configService.Get(_vector));
            var cipher = new byte[16];

            Buffer.BlockCopy(fullCipher, 0, IV, 0, IV.Length);
            Buffer.BlockCopy(fullCipher, IV.Length, cipher, 0, IV.Length);
            var key = Encoding.UTF8.GetBytes(_configService.Get(_key));

            using (var aesAlg = Aes.Create())
            {
                using (var decryptor = aesAlg.CreateDecryptor(key, IV))
                {
                    string result;
                    using (var msDecrypt = new MemoryStream(cipher))
                    {
                        using (var csDecrypt = new CryptoStream(msDecrypt, decryptor, CryptoStreamMode.Read))
                        {
                            using (var srDecrypt = new StreamReader(csDecrypt))
                            {
                                result = srDecrypt.ReadToEnd();
                            }
                        }
                    }

                    return result;
                }
            }
        }
        catch (Exception e)
        {
            Loggifer.Error("Unable to decrypt string: "+cipherText , e );
            throw e;
        }
    }

}
}

推荐答案

函数public string DecryptString(string cipherText)

 var cipher = new byte[fullCipher.Length - IV.Length];

 Buffer.BlockCopy(fullCipher, IV.Length, cipher, 0, fullCipher.Length - IV.Length);

这篇关于指定的填充模式对此算法无效 - c# - System.Security.Cryptography的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持跟版网!

The End

相关推荐

C# 中的多播委托奇怪行为?
Multicast delegate weird behavior in C#?(C# 中的多播委托奇怪行为?)...
2023-11-11 C#/.NET开发问题
6

参数计数与调用不匹配?
Parameter count mismatch with Invoke?(参数计数与调用不匹配?)...
2023-11-11 C#/.NET开发问题
26

如何将代表存储在列表中
How to store delegates in a List(如何将代表存储在列表中)...
2023-11-11 C#/.NET开发问题
6

代表如何工作(在后台)?
How delegates work (in the background)?(代表如何工作(在后台)?)...
2023-11-11 C#/.NET开发问题
5

没有 EndInvoke 的 C# 异步调用?
C# Asynchronous call without EndInvoke?(没有 EndInvoke 的 C# 异步调用?)...
2023-11-11 C#/.NET开发问题
2

Delegate.CreateDelegate() 和泛型:错误绑定到目标方法
Delegate.CreateDelegate() and generics: Error binding to target method(Delegate.CreateDelegate() 和泛型:错误绑定到目标方法)...
2023-11-11 C#/.NET开发问题
14