下面是我的加密和解密方法。我有两个数据库,我将加密的密码从一个数据库复制到另一个数据库。代码是用vb写的,但我把它转换成了C#。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Security.Cryptography;
using System.IO;
namespace AccountSystem.Class{
class ClEncrDecr
{
private TripleDESCryptoServiceProvider tripleDESCryptoServiceProvider = new TripleDESCryptoServiceProvider();
private byte[] TruncateHash(string key, int length)
{
SHA1CryptoServiceProvider sha1 = new SHA1CryptoServiceProvider();
//Hash the Key
byte[] keyBytes = System.Text.Encoding.Unicode.GetBytes(key);
byte[] hash = sha1.ComputeHash(keyBytes);
// truncate or pad the hash
Array.Resize(ref hash, length);
return hash;
}
public ClEncrDecr()
{
string key = "ABCD";
tripleDESCryptoServiceProvider.Key = TruncateHash(key, tripleDESCryptoServiceProvider.KeySize / 8 );
tripleDESCryptoServiceProvider.IV = TruncateHash("", tripleDESCryptoServiceProvider.BlockSize / 8 );
}
public string EncryptData(string plainText)
{
byte[] plaintextBytes = System.Text.Encoding.Unicode.GetBytes(plainText);
MemoryStream ms = new MemoryStream();
CryptoStream encStream = new CryptoStream(ms, tripleDESCryptoServiceProvider.CreateEncryptor(), System.Security.Cryptography.CryptoStreamMode.Write);
encStream.Write(plaintextBytes, 0, plaintextBytes.Length);
encStream.FlushFinalBlock();
return Convert.ToBase64String(ms.ToArray());
}
public string DecryptData(string encryptedtext)
{
byte[] encryptedBytes = Convert.FromBase64String(encryptedtext);
MemoryStream ms = new MemoryStream();
CryptoStream decStream = new CryptoStream(ms, tripleDESCryptoServiceProvider.CreateDecryptor(), CryptoStreamMode.Write);
decStream.Write(encryptedBytes, 0, encryptedBytes.Length);
decStream.FlushFinalBlock();
return System.Text.Encoding.Unicode.GetString(ms.ToArray());
}
}
}
登录代码:
MessageBox.Show(crypto.DecryptData(obj.password))
当我们调用DecryptData(string encryptedtext)
时,它会抛出一个异常,声明为Invalid length for a Base-64 char array or string
。我能做什么?
发布于 2015-02-11 11:31:18
如果您有以下加密密码:
dfghfgdfgd667878nnvghv
无法将其从Base64转换为字节数组,因为它不是有效的Base64String。有效的Base64String应为:
dfghfgdfgd667878nnvghv==
发布于 2015-02-11 10:29:19
正如Claudio在评论中提到的,您的encryptedtext变量不是base64编码的字符串,也许它至少在末尾缺少填充字符。
从示例中看不出它是如何创建的,但您可能想要查看示例,例如这个问题:How do I encode and decode a base64 string?
https://stackoverflow.com/questions/28450852
复制