使用Rijndael解密将返回额外的问号C#
当它转换为字符串时,我有一个额外的问号。使用Rijndael解密将返回额外的问号C#,c#,encryption,rijndael,C#,Encryption,Rijndael,当它转换为字符串时,我有一个额外的问号。 这是我的密码: public static byte[] StreamToByteArray(Stream inputStream) { var ms = new MemoryStream(); inputStream.Position = 0; inputStream.CopyTo(ms); return ms.ToArray
这是我的密码:
public static byte[] StreamToByteArray(Stream inputStream)
{
var ms = new MemoryStream();
inputStream.Position = 0;
inputStream.CopyTo(ms);
return ms.ToArray();
}
public static Stream DecryptStream(Stream inputStream)
{
string key = "ThisIsMySuperSecureKey";
byte[] keyBytes = Encoding.UTF32.GetBytes(key);
Rfc2898DeriveBytes derviedKey = new Rfc2898DeriveBytes(key, keyBytes);
RijndaelManaged rijndaelCSP = new RijndaelManaged();
rijndaelCSP.Key = derviedKey.GetBytes(rijndaelCSP.KeySize / 8);
rijndaelCSP.IV = derviedKey.GetBytes(rijndaelCSP.BlockSize / 8);
var decryptor = rijndaelCSP.CreateDecryptor();
byte[] arrayOfEncrypedStream = StreamToByteArray(inputStream);
MemoryStream ms = new MemoryStream(arrayOfEncrypedStream);
CryptoStream cs = new CryptoStream(ms, decryptor, CryptoStreamMode.Read);
cs.Read(arrayOfEncrypedStream, 0, arrayOfEncrypedStream.Length);
MemoryStream output = new MemoryStream(ms.ToArray());
ms.Close();
return output;
}
我的加密方法:
public static Stream EncryptStream(Stream inputStream)
{
string key = "ThisIsMySuperSecureKey";
byte[] keyBytes = Encoding.UTF32.GetBytes(key);
Rfc2898DeriveBytes derviedKey = new Rfc2898DeriveBytes(key, keyBytes);
RijndaelManaged rijndaelCSP = new RijndaelManaged();
rijndaelCSP.Key = derviedKey.GetBytes(rijndaelCSP.KeySize / 8);
rijndaelCSP.IV = derviedKey.GetBytes(rijndaelCSP.BlockSize / 8);
var encryptor = rijndaelCSP.CreateEncryptor();
MemoryStream ms = new MemoryStream();
CryptoStream cs = new CryptoStream(ms, encryptor, CryptoStreamMode.Write);
//inputStream.Position = 0;
byte[] toEncrypt = StreamToByteArray(inputStream);
cs.Write(toEncrypt, 0, toEncrypt.Length);
cs.FlushFinalBlock();
MemoryStream output = new MemoryStream(ms.ToArray());
ms.Close();
return (Stream)output;
}
public static byte[] StreamToByteArray(Stream inputStream)
{
var ms = new MemoryStream();
inputStream.Position = 0;
inputStream.CopyTo(ms);
return ms.ToArray();
}
public static Stream DecryptStream(Stream inputStream)
{
string key = "ThisIsMySuperSecureKey";
byte[] keyBytes = Encoding.UTF32.GetBytes(key);
Rfc2898DeriveBytes derviedKey = new Rfc2898DeriveBytes(key, keyBytes);
RijndaelManaged rijndaelCSP = new RijndaelManaged();
rijndaelCSP.Key = derviedKey.GetBytes(rijndaelCSP.KeySize / 8);
rijndaelCSP.IV = derviedKey.GetBytes(rijndaelCSP.BlockSize / 8);
var decryptor = rijndaelCSP.CreateDecryptor();
byte[] arrayOfEncrypedStream = StreamToByteArray(inputStream);
MemoryStream ms = new MemoryStream(arrayOfEncrypedStream);
CryptoStream cs = new CryptoStream(ms, decryptor, CryptoStreamMode.Read);
cs.Read(arrayOfEncrypedStream, 0, arrayOfEncrypedStream.Length);
MemoryStream output = new MemoryStream(ms.ToArray());
ms.Close();
return output;
}
static void Main(string[] args)
{
byte[] streamBytes = Encoding.Unicode.GetBytes("Hello people");
MemoryStream ms = new MemoryStream(streamBytes);
var cryptedStream = Encryption.EncryptStream(ms);
var decryptStream = Encryption.DecryptStream(cryptedStream);
string isCryptedStreamAfterDecryption =
Demo3.IsCryptedStream(decryptStream);
Console.WriteLine($"After Decryption: {isCryptedStreamAfterDecryption}");
}
将流转换为字节数组的我的方法:
public static byte[] StreamToByteArray(Stream inputStream)
{
var ms = new MemoryStream();
inputStream.Position = 0;
inputStream.CopyTo(ms);
return ms.ToArray();
}
public static Stream DecryptStream(Stream inputStream)
{
string key = "ThisIsMySuperSecureKey";
byte[] keyBytes = Encoding.UTF32.GetBytes(key);
Rfc2898DeriveBytes derviedKey = new Rfc2898DeriveBytes(key, keyBytes);
RijndaelManaged rijndaelCSP = new RijndaelManaged();
rijndaelCSP.Key = derviedKey.GetBytes(rijndaelCSP.KeySize / 8);
rijndaelCSP.IV = derviedKey.GetBytes(rijndaelCSP.BlockSize / 8);
var decryptor = rijndaelCSP.CreateDecryptor();
byte[] arrayOfEncrypedStream = StreamToByteArray(inputStream);
MemoryStream ms = new MemoryStream(arrayOfEncrypedStream);
CryptoStream cs = new CryptoStream(ms, decryptor, CryptoStreamMode.Read);
cs.Read(arrayOfEncrypedStream, 0, arrayOfEncrypedStream.Length);
MemoryStream output = new MemoryStream(ms.ToArray());
ms.Close();
return output;
}
我检查流是否加密的方法:
public static byte[] StreamToByteArray(Stream inputStream)
{
var ms = new MemoryStream();
inputStream.Position = 0;
inputStream.CopyTo(ms);
return ms.ToArray();
}
public static Stream DecryptStream(Stream inputStream)
{
string key = "ThisIsMySuperSecureKey";
byte[] keyBytes = Encoding.UTF32.GetBytes(key);
Rfc2898DeriveBytes derviedKey = new Rfc2898DeriveBytes(key, keyBytes);
RijndaelManaged rijndaelCSP = new RijndaelManaged();
rijndaelCSP.Key = derviedKey.GetBytes(rijndaelCSP.KeySize / 8);
rijndaelCSP.IV = derviedKey.GetBytes(rijndaelCSP.BlockSize / 8);
var decryptor = rijndaelCSP.CreateDecryptor();
byte[] arrayOfEncrypedStream = StreamToByteArray(inputStream);
MemoryStream ms = new MemoryStream(arrayOfEncrypedStream);
CryptoStream cs = new CryptoStream(ms, decryptor, CryptoStreamMode.Read);
cs.Read(arrayOfEncrypedStream, 0, arrayOfEncrypedStream.Length);
MemoryStream output = new MemoryStream(ms.ToArray());
ms.Close();
return output;
}
public static string IsCryptedStream(Stream cryptedStream)
{
string result = "";
byte[] convStremToBytes = Encryption.StreamToByteArray(cryptedStream);
return result = Encoding.UTF32.GetString(convStremToBytes);
}
我读过关于这个问题的类似文章,但没有成功。我需要帮助。谢谢你
public static byte[] StreamToByteArray(Stream inputStream)
{
var ms = new MemoryStream();
inputStream.Position = 0;
inputStream.CopyTo(ms);
return ms.ToArray();
}
public static Stream DecryptStream(Stream inputStream)
{
string key = "ThisIsMySuperSecureKey";
byte[] keyBytes = Encoding.UTF32.GetBytes(key);
Rfc2898DeriveBytes derviedKey = new Rfc2898DeriveBytes(key, keyBytes);
RijndaelManaged rijndaelCSP = new RijndaelManaged();
rijndaelCSP.Key = derviedKey.GetBytes(rijndaelCSP.KeySize / 8);
rijndaelCSP.IV = derviedKey.GetBytes(rijndaelCSP.BlockSize / 8);
var decryptor = rijndaelCSP.CreateDecryptor();
byte[] arrayOfEncrypedStream = StreamToByteArray(inputStream);
MemoryStream ms = new MemoryStream(arrayOfEncrypedStream);
CryptoStream cs = new CryptoStream(ms, decryptor, CryptoStreamMode.Read);
cs.Read(arrayOfEncrypedStream, 0, arrayOfEncrypedStream.Length);
MemoryStream output = new MemoryStream(ms.ToArray());
ms.Close();
return output;
}
更新:
public static Stream EncryptStream(Stream inputStream)
{
string key = "ThisIsMySuperSecureKey";
byte[] keyBytes = Encoding.UTF32.GetBytes(key);
Rfc2898DeriveBytes derviedKey = new Rfc2898DeriveBytes(key, keyBytes);
RijndaelManaged rijndaelCSP = new RijndaelManaged();
rijndaelCSP.Key = derviedKey.GetBytes(rijndaelCSP.KeySize / 8);
rijndaelCSP.IV = derviedKey.GetBytes(rijndaelCSP.BlockSize / 8);
var encryptor = rijndaelCSP.CreateEncryptor();
MemoryStream ms = new MemoryStream();
CryptoStream cs = new CryptoStream(ms, encryptor, CryptoStreamMode.Write);
//inputStream.Position = 0;
byte[] toEncrypt = StreamToByteArray(inputStream);
cs.Write(toEncrypt, 0, toEncrypt.Length);
cs.FlushFinalBlock();
MemoryStream output = new MemoryStream(ms.ToArray());
ms.Close();
return (Stream)output;
}
public static byte[] StreamToByteArray(Stream inputStream)
{
var ms = new MemoryStream();
inputStream.Position = 0;
inputStream.CopyTo(ms);
return ms.ToArray();
}
public static Stream DecryptStream(Stream inputStream)
{
string key = "ThisIsMySuperSecureKey";
byte[] keyBytes = Encoding.UTF32.GetBytes(key);
Rfc2898DeriveBytes derviedKey = new Rfc2898DeriveBytes(key, keyBytes);
RijndaelManaged rijndaelCSP = new RijndaelManaged();
rijndaelCSP.Key = derviedKey.GetBytes(rijndaelCSP.KeySize / 8);
rijndaelCSP.IV = derviedKey.GetBytes(rijndaelCSP.BlockSize / 8);
var decryptor = rijndaelCSP.CreateDecryptor();
byte[] arrayOfEncrypedStream = StreamToByteArray(inputStream);
MemoryStream ms = new MemoryStream(arrayOfEncrypedStream);
CryptoStream cs = new CryptoStream(ms, decryptor, CryptoStreamMode.Read);
cs.Read(arrayOfEncrypedStream, 0, arrayOfEncrypedStream.Length);
MemoryStream output = new MemoryStream(ms.ToArray());
ms.Close();
return output;
}
static void Main(string[] args)
{
byte[] streamBytes = Encoding.Unicode.GetBytes("Hello people");
MemoryStream ms = new MemoryStream(streamBytes);
var cryptedStream = Encryption.EncryptStream(ms);
var decryptStream = Encryption.DecryptStream(cryptedStream);
string isCryptedStreamAfterDecryption =
Demo3.IsCryptedStream(decryptStream);
Console.WriteLine($"After Decryption: {isCryptedStreamAfterDecryption}");
}
结果:“大家好?”问号可能重复出现在开头还是结尾?你能举个例子吗?我在结尾有一个问号。问号是在开头还是结尾?你能举个例子吗?我在结尾有一个问号
public static byte[] StreamToByteArray(Stream inputStream)
{
var ms = new MemoryStream();
inputStream.Position = 0;
inputStream.CopyTo(ms);
return ms.ToArray();
}
public static Stream DecryptStream(Stream inputStream)
{
string key = "ThisIsMySuperSecureKey";
byte[] keyBytes = Encoding.UTF32.GetBytes(key);
Rfc2898DeriveBytes derviedKey = new Rfc2898DeriveBytes(key, keyBytes);
RijndaelManaged rijndaelCSP = new RijndaelManaged();
rijndaelCSP.Key = derviedKey.GetBytes(rijndaelCSP.KeySize / 8);
rijndaelCSP.IV = derviedKey.GetBytes(rijndaelCSP.BlockSize / 8);
var decryptor = rijndaelCSP.CreateDecryptor();
byte[] arrayOfEncrypedStream = StreamToByteArray(inputStream);
MemoryStream ms = new MemoryStream(arrayOfEncrypedStream);
CryptoStream cs = new CryptoStream(ms, decryptor, CryptoStreamMode.Read);
cs.Read(arrayOfEncrypedStream, 0, arrayOfEncrypedStream.Length);
MemoryStream output = new MemoryStream(ms.ToArray());
ms.Close();
return output;
}