根据我的问题Aes Encryption ...错过了一个重要的部分,我现在已经了解到我在字符串上创建可逆加密的假设有点过时了.我现在有
public static byte[] EncryptString(string toEncrypt, byte[] encryptionKey)
{
var toEncryptBytes = Encoding.UTF8.GetBytes(toEncrypt);
using (var provider = new AesCryptoServiceProvider())
{
provider.Key = encryptionKey;
provider.Mode = CipherMode.CBC;
provider.Padding = PaddingMode.PKCS7;
using (var encryptor = provider.CreateEncryptor(provider.Key, provider.IV))
{
using (var ms = new MemoryStream())
{
using (var cs = new CryptoStream(ms, encryptor, CryptoStreamMode.Write))
{
cs.Write(toEncryptBytes, 0, toEncryptBytes.Length);
cs.FlushFinalBlock();
}
return ms.ToArray();
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
这产生了一致的结果; 但是,如果不知道/设置初始化向量,我将无法解密.我真的不想将三个值传递给这个方法(在IV上),这让我硬编码IV或从密钥中导出它.我想知道这是不是一个好的做法,或者它是否会使加密的值容易受到某种程度的攻击......或者我是否真的过度思考这个并且应该硬编码IV?
更新 根据铱星的建议,我尝试了类似的东西:
public static byte[] EncryptString(string toEncrypt, byte[] encryptionKey)
{
if …Run Code Online (Sandbox Code Playgroud) 我正在尝试最基本的事情 - 使用公钥加密数据并使用私钥解密:
X509Certificate2 cert = new X509Certificate2(@"c:\temp\CERT\mycert.pfx", "test1");
RSACryptoServiceProvider privateKey = cert.PrivateKey as RSACryptoServiceProvider;
RSACryptoServiceProvider publicKey = cert.PublicKey.Key as RSACryptoServiceProvider;
UnicodeEncoding bytConvertor = new UnicodeEncoding();
byte[] plainData = bytConvertor.GetBytes("Sample data");
byte[] enData = publicKey.Encrypt(plainData, true);
Console.WriteLine("Encrypted Output: {0}", bytConvertor.GetString(enData));
byte[] deData = privateKey.Decrypt(enData, true);
Console.WriteLine("Decrypted Output: {0}", bytConvertor.GetString(deData));
Run Code Online (Sandbox Code Playgroud)
但是最后一行privateKey.Decrypt(...)抛出以下异常:
System.Security.Cryptography.CryptographicException未处理
Message = Bad Key.Run Code Online (Sandbox Code Playgroud)Source=mscorlib StackTrace: at System.Security.Cryptography.CryptographicException.ThrowCryptographicException(Int32 hr) at System.Security.Cryptography.RSACryptoServiceProvider.DecryptKey(SafeKeyHandle pKeyContext, Byte[] pbEncryptedKey, Int32 cbEncryptedKey, Boolean fOAEP, ObjectHandleOnStack ohRetDecryptedKey) at System.Security.Cryptography.RSACryptoServiceProvider.Decrypt(Byte[] rgb, Boolean fOAEP) at ConsoleApplication4.Program.Main(String[] args) in …
我需要一个.NET (理想情况下是C#)算法,它会产生与vb6我加密和decrypt二进制文件相同的结果.我一直在努力寻找代码一周,但收效甚微.
我开始使用如何加密VB6中的字符串解密VB.NET,但它只是一半的解决方案,它使用RC2而不是AES.在一些摆弄之后,我得到了我的vb6代码,AES但我找不到一种方法c#来产生相同的结果.我认为这与我Key和我的方式有关IV.我一直在浏览加密服务我的尝试可以分为两种基本类型.我努力PasswordDeriveBytes.CryptDeriveKey尝试使用它的地方aes.根本没有成功.尝试模仿它的行为.贝娄我会发布我的vb6代码和我最接近的c#尝试.我不能100%肯定地说这vb6是完美的,所以如果需要做出改变,我会对它持开放态度.我知道有一种方法可以使用p调用,我知道有一种方法可以让.net dll我从我的调用vb apps.我宁愿不这样做.
VB6功能
Public Function Crypt_File(PathToSourceFile As String, PathToDestFile As String, Password As String, HowTo As CryptMethod) As Boolean
Const FName As String = "mdlCryptography.Encrypt_file"
Dim CryptoContext As Long
Dim strProvider As String
Dim HashHnd As Long
Dim CrypKey As …Run Code Online (Sandbox Code Playgroud)