【发布时间】:2018-07-02 08:28:00
【问题描述】:
我是 C# 新手,在尝试简单地加密和解密简单字符串时遇到了加密异常。对于密钥,我使用了短语“Pyber”的 SHA512 哈希。这似乎是一个问题,因为密钥(即 Pyber)的大小不合适。
在调试时,我得到这个:
在 mscorlib.dll 中发生了“System.Security.Cryptography.CryptographicException”类型的未处理异常
附加信息:指定的密钥不是该算法的有效大小。
感谢任何帮助。
编辑:现在尝试使用 MD5,加密效果很好,而解密仍然抛出相同的异常。
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Security.Cryptography;
namespace ENC_1
{
public partial class main : Form
{
public main()
{
InitializeComponent();
}
string hash = "Pyber";
private void button1_MouseHover(object sender, EventArgs e)
{
//Don't do anything
}
private void btn_encrypt_Click(object sender, EventArgs e)
{
byte[] data = UTF8Encoding.UTF8.GetBytes(txt_input.Text);
using (SHA512CryptoServiceProvider SHA512 = new SHA512CryptoServiceProvider())
{
byte[] keys = SHA512.ComputeHash(UTF8Encoding.UTF8.GetBytes(hash));
using (TripleDESCryptoServiceProvider tripDes = new TripleDESCryptoServiceProvider() { Key = keys, Mode = CipherMode.ECB, Padding = PaddingMode.PKCS7 })
{
ICryptoTransform transform = tripDes.CreateEncryptor();
byte[] results = transform.TransformFinalBlock(data, 0, data.Length);
txt_encrypt.Text = Convert.ToBase64String(results, 0, results.Length);
}
}
}
private void btn_decrypt_Click(object sender, EventArgs e)
{
byte[] data = Convert.FromBase64String(txt_encrypt.Text);
using (SHA512CryptoServiceProvider SHA512 = new SHA512CryptoServiceProvider())
{
byte[] keys = SHA512.ComputeHash(UTF8Encoding.UTF8.GetBytes(hash));
using (TripleDESCryptoServiceProvider tripDes = new TripleDESCryptoServiceProvider() { Key = keys, Mode = CipherMode.ECB, Padding = PaddingMode.PKCS7 })
{
ICryptoTransform transform = tripDes.CreateDecryptor();
byte[] results = transform.TransformFinalBlock(data, 0, data.Length);
txt_encrypt.Text = UTF8Encoding.UTF8.GetString(results);
}
}
}
}
}
【问题讨论】:
标签: c# encryption hash