Tag: 加密

写入流时计算哈希值

我目前正在创建需要签名的加密文件格式。 为此,我需要计算我写入流的内容的哈希码。 在.net框架中有许多可以使用的哈希算法,并且它工作正常,但它需要我处理流三次。 byte[] content = new byte[] { 0, 1, 2, 3, 4, 5, 6 }; using (Stream fileStream = File.Open(“myfile.bin”, FileMode.Create)) { //Write content fileStream.Write(content, 0, content.Length); } byte[] hashValue = null; using (Stream fileStream = File.Open(“myfile.bin”, FileMode.Open)) { HashAlgorithm hash = SHA256.Create(); hashValue = hash.ComputeHash(fileStream); } using (Stream fileStream = File.Open(“myfile.bin”, FileMode.Append)) […]

如何在本地正确存储密码

我一直在MSDN上阅读这篇关于Rfc2898DeriveBytes的文章。 以下是它们提供的示例加密代码。 string pwd1 = passwordargs[0]; // Create a byte array to hold the random value. byte[] salt1 = new byte[8]; using (RNGCryptoServiceProvider rngCsp = ne RNGCryptoServiceProvider()) { // Fill the array with a random value. rngCsp.GetBytes(salt1); } //data1 can be a string or contents of a file. string data1 = “Some test data”; //The […]

使用AES / Rijndael在PHP中加密,在C#(WP7 / Silverlight)中解密

我在我的Android应用程序中使用PHP编写的REST服务没有太多麻烦。 现在我正试图在Windows Phone应用程序中使用它,我已经疯了! 到目前为止我所知道的: Silverlight只接受CBC模式下的Aes和PKCS7填充。 我得到的:“填充无效,无法删除”exception(参见底部的完整代码): plaintext = srDecrypt.ReadToEnd(); 如果我在C#中加密和解密,使用相同的配置,它工作正常。 当我尝试从PHP加密字符串中输入C#时,它会因上述错误而失败。 我的PHP脚本执行以下操作: function encrypt128($message) { $vector = “DB96A56CCA7A69FC”; $key = “6DBC44F54CA3CFDEDDCA140CA46A99C1”; // PHP md5 function leaves it in lower case, so I just copied the key from C# debug. //PKCS7 Padding $block = mcrypt_get_block_size(‘rijndael_128’, ‘cbc’); $pad = $block – (strlen($message) % $block); $message.= str_repeat(chr($pad), $pad); […]

C#/ Java | AES256加密/解密

我想加密通过Java / C#套接字(Java服务器,C#客户端)发送的所有数据。 我想使用AES256,但我不能让Java和C#生成相同的加密代码。 任何人都可以给我两个例子,1个用Java,1个用C#生成相同的结果并正确解密结果? 到目前为止我尝试了什么: public Encrypt(AOBCore instance){ try { String message=”This is just an example”; // Get the KeyGenerator KeyGenerator kgen = KeyGenerator.getInstance(“AES”); kgen.init(256); // 192 and 256 bits may not be available // Generate the secret key specs. SecretKey skey = kgen.generateKey(); //Cantget ‘test’ in here… byte[] raw = skey.getEncoded(); SecretKeySpec skeySpec […]

如何加密/解密XML文件?

我正在尝试加密/解密XML文件。 我发现这个样本用于加密但我不知道如何解密? 任何的想法? 谢谢! // Load this XML file System.Xml.XmlDocument myDoc = new System.Xml.XmlDocument(); myDoc.Load(@”c:\persons.xml”); // Get a specified element to be encrypted System.Xml.XmlElement element = myDoc.GetElementsByTagName(“Persons”)[0] as System.Xml.XmlElement; // Create a new TripleDES key. System.Security.Cryptography.TripleDESCryptoServiceProvider tDESkey = new System.Security.Cryptography.TripleDESCryptoServiceProvider(); // Form a Encrypted XML with the Key System.Security.Cryptography.Xml.EncryptedXml encr = new System.Security.Cryptography.Xml.EncryptedXml(); encr.AddKeyNameMapping(“Deskey”, tDESkey); […]

在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)) […]

如何在序列化后加密并保存二进制流并将其读回?

当我想在二进制序列化后加密二进制流并将其保存到文件时,我在使用CryptoStream时遇到一些问题。 我收到以下exception System.ArgumentException : Stream was not readable. 任何人都可以告诉我如何加密二进制流并将其保存到文件并正确反序列化? 代码如下: class Program { public static void Main(string[] args) { var b = new B {Name = “BB”}; WriteFile(@”C:\test.bin”, b, true); var bb = ReadFile(@”C:\test.bin”, true); Console.WriteLine(b.Name == bb.Name); Console.ReadLine(); } public static T ReadFile(string file, bool decrypt) { T bObj = default(T); var _binaryFormatter = […]

使用C#中的.Pem / .Pkcs8密钥文件中的MD5WithRSA对数据进行签名

我在Java中有以下代码示例,我需要在C#中重新编写它: PKCS8EncodedKeySpec privKeySpec = new PKCS8EncodedKeySpec(pkcs8PrivateKey); KeyFactory keyFactory = KeyFactory.getInstance(“RSA”); PrivateKey privKey = keyFactory.generatePrivate(privKeySpec); Signature sign = Signature.getInstance(“MD5withRSA”); sign.initSign(privKey); sign.update(data); byte[] signature = sign.sign(); 是否可以使用标准的.Net Crypto API,还是应该使用BouncyCastle? 谢谢, 湾

如何为试用版软件强制执行到期日期?

我需要为我的自定义软件提供试用期。 我有一个64位C#应用程序,它使用64位,多处理器支持DLL。 要包含的其他实用程序是用C ++编写的(exes和dlls)。 我必须能够加密C#代码,键入软件以仅在特定机器上运行,并强制执行无法通过重置机器时钟来阻止的到期日期。 我已经评估了几个开源和COTS解决方案:Infralution Licensing System,Protector和ExeShield,仅举几例。 它们都不满足我的所有约束。 是否有人知道我应该考虑一个全面的解决方案? 或者我是否需要进行一些注册表潜水并通过自定义代码强制执行?

C#使用System.Security.Cryptography.Aes进行AES256加密的示例

我需要实现AES 256加密/解密,我无法找到一个正常工作的示例。 MSDN建议我应该使用AES类。 Rijndael类是Aes算法的前身。 您应该使用Aes算法而不是Rijndael。 有关更多信息,请参阅.NET安全博客中的Rijndael和AES之间的条目。 有没有人能指出我使用AES类AES2的一个很好的例子? 为了增加一点清晰度: 我有一个密码文件,其中包含共享密钥和一串加密文本。 我需要解密文本然后validation它。 我见过的所有例子都希望至少有2个参数来执行加密/解密。 我是否能够从密码文件中的文本推断初始化向量和密钥? 这是我的密码文件中保存的文本示例: ÊÚḱÌráƒ@†²;Ä;öDWnªóª©¨¨L