相关疑难解决方法(0)

良好的AES初始化矢量实践

根据我的问题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)

c# aescryptoserviceprovider initialization-vector

50
推荐指数
5
解决办法
6万
查看次数

使用C#中的RSAServiceProvider进行加密和解密

我正在尝试最基本的事情 - 使用公钥加密数据并使用私钥解密:

    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.

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 …
Run Code Online (Sandbox Code Playgroud)

.net c# encryption

9
推荐指数
1
解决办法
6700
查看次数

vb6和c#中的AES加密

我需要一个.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)

c# vb6 cryptography encryption-symmetric

4
推荐指数
1
解决办法
4362
查看次数