Tag: 加密对称

我应该如何为AES加密数据库条目派生密钥和初始化向量?

我已经构建了一个CMS系统,允许用户在我的客户端的Intranet应用程序上创建和管理在线表单。 当然,表单处理的一些数据可能需要加密,例如,如果系统用于构建处理工资细节或其他任何内容的表单。 所以我使用AESManaged类在进入我们的应用程序db之前对这种数据进行对称加密。 一切都很好,但现在,在发布之前,我可以做一个关于shared secret和salt的转向。 我最初的想法是通过将包含加密字段的Form的(基于GUID的)ID与问题的(再次,基于GUID的)ID相结合来创建(动态) shared secret ,该字段是以下答案: FormId:QuestionId 我的Salt目前以相同的方式生成,只有Guids顺序颠倒了。 QuestionID:FormID. 我是新手,所以不确定这是一个明智的策略,还是我应该以其他方式做到这一点?

在EOF抛出exception之前停止解密:填充无效且无法删除

这就是我们拥有的场景:我们有大量的加密文件,大约为千兆字节,如果我们将它们读到最后,我们就可以正确解密。 当我们正在读取并检测文件中的某个标志时出现问题,然后我们停止读取并调用reader.Close(),会发生的是CryptographicException:“Padding无效且无法删除”。 被抛出。 我有这个小控制台应用程序重现这种行为,测试它只是运行它,它将在你的C:\驱动器中创建一个文件然后按任意键时将逐行读取,并在按’q’时将停止。 using System; using System.IO; using System.Security.Cryptography; namespace encryptSample { class Program { static void Main(string[] args) { var transform = CreateCryptoTransform(true); // first create encrypted file using (FileStream destination = new FileStream(“c:\\test_enc.txt”, FileMode.OpenOrCreate, FileAccess.Write, FileShare.ReadWrite)) { using (CryptoStream cryptoStream = new CryptoStream(destination, transform, CryptoStreamMode.Write)) { using (StreamWriter source = new StreamWriter(cryptoStream)) […]

PHP相当于.net AES加密

我正在与客户进行数据交换集成,他们发送给我的数据使用他们的C# encrypt方法encrypt (如下)。 我的应用程序正在运行PHP 5.3,我需要一个等效的代码来解密他们发送的数据。 我有PHP代码,但它不能正确解密客户端数据。 显然,我在加密/解密方法,IV键或其他方面犯了一些错误。 谁能发现错误? 谢谢。 C#代码(来自我的客户): using System; using System.Security.Cryptography; using System.Text; using System.IO; public class Program { public static void Main() { var text = “this is a plain string”; var enc = Program.Encrypt(text); Console.WriteLine(enc); Console.WriteLine(Program.Decrypt(enc)); } public static string Encrypt(string clearText) { var EncryptionKey = “1234567890123456”; byte[] clearBytes = […]

使用DPAPI时安全存储可选熵

所以我试图使用DPAPI存储对称密钥。 一切都很好,但是如何处理熵呢? 这里回答的问题确实无法提供足够的见解。 这似乎是一个滑坡 – 我可以使用机器商店来存储熵但是那么是什么阻止某人也可以使用它? 注意:我使用用户范围存储当前密钥。 所以我的问题是 – 使用DPAPI存储熵的最佳方法是什么?

对称加密(AES):保存IV和Salt以及加密数据是否安全且正确?

在使用对称加密算法(在本例中为AES)加密和解密数据时,我试图理解如何处理和管理启动向量和盐(适用时)。 我从不同的SO线程和各种其他网站推断出,IV或盐都不需要保密,只是为了防御密码分析攻击,例如蛮力攻击。 考虑到这一点,我认为将伪随机IV与加密数据一起存储是可行的。 我问的是我使用的方法是否合适,而且,我是否应该以同样的方式处理我当前的硬编码盐? 那就是将它写在IV旁边的内存流中 我的代码: private const ushort ITERATIONS = 300; private static readonly byte[] SALT = new byte[] { 0x26, 0xdc, 0xff, 0x00, 0xad, 0xed, 0x7a, 0xee, 0xc5, 0xfe, 0x07, 0xaf, 0x4d, 0x08, 0x22, 0x3c }; private static byte[] CreateKey(string password, int keySize) { DeriveBytes derivedKey = new Rfc2898DeriveBytes(password, SALT, ITERATIONS); return derivedKey.GetBytes(keySize […]