如何解密加密文本
How do I decrypt encrypted text?
我找到了允许我加密和解密文本的代码:
cipherData = textBox2->Text;
plainbytes = Encoding::ASCII->GetBytes(cipherData);
plainKey = Encoding::ASCII->GetBytes("0123456789abcdef");
desObj->Key = plainKey;
desObj->Mode = CipherMode::CBC;
desObj->Padding = PaddingMode::PKCS7;
MemoryStream^ ms = gcnew MemoryStream();
CryptoStream^ cs = gcnew CryptoStream(ms,desObj->CreateEncryptor(),CryptoStreamMode::Write);
cs->Write(plainbytes,0,plainbytes->Length);
cs->Close();
chipherbytes = ms->ToArray();
ms->Close();
textBox3->Text = Encoding::ASCII->GetString(chipherbytes);
//decripto
MemoryStream^ ms1 = gcnew MemoryStream(chipherbytes);
CryptoStream^ cs1 = gcnew CryptoStream(ms1,desObj->CreateDecryptor(),CryptoStreamMode::Read);
cs1->Read(chipherbytes,0,chipherbytes->Length);
plainbytes2 = ms1->ToArray();
cs1->Close();
ms1->Close();
textBox4->Text = Encoding::ASCII->GetString(plainbytes2);
这是完美的,工作得很好。问题是,我希望解密以前的加密文本,从ASCII开始,而不是从MemoryStream。
我试过这样的代码:
cipherData = textBox2->Text;
plainbytes = Encoding::ASCII->GetBytes(cipherData);
plainKey = Encoding::ASCII->GetBytes("0123456789abcdef");
desObj->Key = plainKey;
desObj->Mode = CipherMode::CBC;
desObj->Padding = PaddingMode::PKCS7;
MemoryStream^ ms = gcnew MemoryStream();
CryptoStream^ cs = gcnew CryptoStream(ms,desObj->CreateEncryptor(),CryptoStreamMode::Write);
cs->Write(plainbytes,0,plainbytes->Length);
cs->Close();
chipherbytes = ms->ToArray();
ms->Close();
textBox3->Text = Encoding::ASCII->GetString(chipherbytes);
//DECRYPTION CODE
cipherData = textBox3->Text;
chipherbytes = Encoding::ASCII->GetBytes(cipherData);
MemoryStream^ ms1 = gcnew MemoryStream(chipherbytes);
CryptoStream^ cs1 = gcnew CryptoStream(ms1,desObj->CreateDecryptor(),CryptoStreamMode::Read);
cs1->Read(chipherbytes,0,chipherbytes->Length);
plainbytes2 = ms1->ToArray();
cs1->Close();
ms1->Close();
textBox4->Text = Encoding::ASCII->GetString(plainbytes2);
但是当我尝试代码时,我收到这个错误:
类型的未处理异常"System.Security.Cryptography。发生的加密异常mscorlib.dll附加信息:填充无效,不能删除。
编辑1:
我关闭了换行属性,现在我得到了一个新的错误:
Eccezione non gestita di tipo 'System.Security.Cryptography。mscorlib.dll中的CryptographicException'信息论:Lunghezza dei dati da decrittografare non validate .
(类型为"System.Security.Cryptography"的未处理异常。在mscorlib.dll中发生了CryptographicException' >附加信息:要解密的数据长度无效。)
SOLVED
我使用System::Convert::ToBase64String将加密文本正确写入文本框,避免数据丢失;然后我使用System::Convert::FromBase64String
从文本框中加载文本 //ENCRYPTION CODE
cipherData = textBox2->Text;
plainbytes = Encoding::Unicode->GetBytes(cipherData);
plainKey = Encoding::Unicode->GetBytes("0123456789abcdef");
desObj->Key = plainKey;
desObj->Mode = CipherMode::CBC;
desObj->Padding = PaddingMode::PKCS7;
MemoryStream^ ms = gcnew MemoryStream();
CryptoStream^ cs = gcnew CryptoStream(ms,desObj->CreateEncryptor(),CryptoStreamMode::Write);
cs->Write(plainbytes,0,plainbytes->Length);
cs->Close();
chipherbytes = ms->ToArray();
ms->Close();
textBox3->Text = System::Convert::ToBase64String(chipherbytes);
//DECRYPTION CODE
chipherbytes = System::Convert::FromBase64String(textBox3->Text);
MemoryStream^ ms1 = gcnew MemoryStream(chipherbytes);
CryptoStream^ cs1 = gcnew CryptoStream(ms1,desObj->CreateDecryptor(),CryptoStreamMode::Read);
cs1->Read(chipherbytes,0,chipherbytes->Length);
plainbytes2 = ms1->ToArray();
cs1->Close();
ms1->Close();
textBox4->Text = Encoding::Unicode->GetString(plainbytes2);
相关文章:
- AES加密到解密未正确输出
- 如何制作一个程序,它使用特定单词加密和解密消息?
- 基本加密和解密方法不起作用 C++ 11.
- 通过递增字符来加密文本文件
- 简单加密和解密 TXT 文件 [C++]
- 加密和解密未显示适当的值
- 无法将加密文本从 C# 传递到C++和相反的文本
- RSA 加密和解密期间的随机数生成器要求
- 从文件进行 Openssl EVP 加密和解密
- 用于加密和解密的C ++程序
- 使用 AES-256 CBC 加密文本文件
- C 加密和解密
- 上和小写字符串的加密和解密,基本密码C
- 加密和解密生成器项目
- 在Linux中寻找正确的方式,将C 应用程序从C 应用程序编写加密文本到加密的GPG文件
- OpenSSL和JSON文件加密和解密
- 在Crypto++中使用原始RSA算法加密和解密消息
- 加密和解密C++和德尔福中的一些字符串
- 使用 Crypto++ 实现 ECC 加密解密时,是否可以将加密文本缩小?
- 如何解密加密文本