C# ASP.NET-加密文件

C# ASP.NET-加密文件,c#,asp.net-mvc,file,encryption,C#,Asp.net Mvc,File,Encryption,我正在使用ASP.NET执行一项任务,其中用户必须上载一个文件,我使用已完成的加密算法进行加密。文件的属性是:ID、名称、和标记。现在,在我加密字符串之前,比如一个名字,但是,我从来没有加密过一个文件,也没有关于它的任何线索 我到底需要加密什么? 加密算法: public static void HybridEncrypt(string publicKey, MemoryStream fileToEncrypt, string filenameOfTheOutputFile) { va

我正在使用ASP.NET执行一项任务,其中用户必须上载一个文件,我使用已完成的加密算法进行加密。文件的属性是:
ID
名称
、和
标记
。现在,在我加密字符串之前,比如一个名字,但是,我从来没有加密过一个文件,也没有关于它的任何线索

我到底需要加密什么?

加密算法:

public static void HybridEncrypt(string publicKey, MemoryStream fileToEncrypt, string filenameOfTheOutputFile)
{
     var publicKeyPath = Path.Combine(Directory.GetCurrentDirectory(), "\\publickey.key");
     Rijndael myAlg = Rijndael.Create();
     myAlg.GenerateIV(); //this is another method how to generate the secret key and iv
     myAlg.GenerateKey();

     byte[] keyStream = myAlg.Key;
     byte[] IVstream = myAlg.Key;
     MemoryStream msFileDataEncrypted = SymmetricEncryptData(fileToEncrypt, keyStream, IVstream);

     MemoryStream keyStreamEncrypt = new MemoryStream(myAlg.Key);
     MemoryStream msEncryptedSecretKey = new Encryption().AsymmetricallyEncrypt(publicKeyPath, keyStreamEncrypt);

     MemoryStream IVStreamEncrypt = new MemoryStream(myAlg.IV);
     MemoryStream msEncryptedIV = new Encryption().AsymmetricallyEncrypt(publicKeyPath, IVStreamEncrypt);

     MemoryStream msAll = new MemoryStream();

     msEncryptedSecretKey.Position = 0;
     msEncryptedIV.Position = 0;
     msFileDataEncrypted.Position = 0;

     msEncryptedSecretKey.CopyTo(msAll);
     msEncryptedIV.CopyTo(msAll);
     msFileDataEncrypted.CopyTo(msAll);
     System.IO.File.WriteAllBytes(filenameOfTheOutputFile, msAll.ToArray());
}

最有可能的是,您的初始向量大小小于16字节。您需要增加初始向量大小

您需要解决三件事

  • 根据oleksa的评论,您需要从
    byte[]IVstream=myAlg.Key
    字节[]IVstream=myAlg.IV
  • 您应该通过将
    httppostedfilebase转换为memorystream c#
    来加密文件,然后作为
    fileToEncrypt
    param传递,而不是
    Encoding.UTF32.GetBytes(stringvale)
  • ID、Name和tags
    仅存储在数据库中的信息,无需加密

  • 这里的问题到底是什么?如何解决异常或“我应该加密什么?”。请一次只关注一个问题,这样更容易提供有价值的具体答案?它应该是
    byte[]IVstream=myAlg.IV我想没问题,所以我删除了我的错误。。我的实际问题是,我到底要加密什么来加密文件?例如,如果我有一个table person,并且我想要加密名称,那么我会加密字段firstName。。现在,如果我想加密一个文件,我应该加密什么?实际上,您并没有加密字段值或文件。您正在加密字节数组<示例中的code>MemoryStream fileToEncrypt
    只是一个包装器,可以提供一组要加密的字节。所以它看起来像1)获取字节(流式传输)2)加密这些字节。以下是在加密之前将字符串转换为字节的方法(只是不要与流混淆)。谢谢你的回复。。我设法把它修好了。。谢谢:D