以下是我的加密和解密方法。我有两个数据库,我将加密的密码从一个数据库复制到另一个数据库。代码是在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
的异常。我该怎么办?
答案 0 :(得分:7)
如果您有以下加密密码:
dfghfgdfgd667878nnvghv
它不能从Base64转换为字节数组,因为它不是有效的Base64String。有效的Base64String将是:
dfghfgdfgd667878nnvghv ==
答案 1 :(得分:0)
正如Claudio在评论中提到的,您的encryptedtext变量不是base64编码的字符串,也许它至少缺少填充字符。
从示例中看不到它是如何创建的,但您可能希望查看此SO问题:How do I encode and decode a base64 string?