Tag: 密码学

如何使用RNGCryptoServiceProvider生成Bridge手?

Bridge的游戏是用52种不同的扑克牌进行的,这些扑克牌随机分布在四个玩家中,每个玩家最终得到13张牌:一个所谓的“交易”。 大约只有不到2 ^ 96的Bridge交易是可能的 。 在本文档中,生成随机交易的程序的要求描述如下: 该软件应该能够生成所有可能的桥接协议,因为这也可以通过手动处理实现。 软件应该以相同的概率生成每笔交易,而不受董事会编号,之前的手或任何其他情况的影响。 即使在会议中看到所有其他交易之后,也无法预测交易。 本文继续说明伪随机生成器不能用于生成交易,因为看到伪随机序列的第一个元素将使得计算所使用的种子成为可能,从而使黑客能够预测将要跟随的交易。 此外,由于大多数伪随机生成器采用32位的种子,因此应该遵循这些生成器将能够产生最多2 ^ 32个不同的桥接交易,而不是所需的2 ^ 96,并且遵循所谓的生日悖论 ,在2 ^ 32交易的平方根之后,可能会产生相同的交易。 描述Bridge交易生成应用程序要求的文档的作者编写了一个程序,在世界范围内用于生成随机交易,使用键盘上的人类输入生成96位种子。 十四年来,这种方法没有出现任何缺陷。 我想编写一个例程,放弃使用人工输入来生成所需种子的需要。 来自RNGCryptoServiceProvider 。 我使用下面的代码来生成随机数,首先在1到52的范围内,然后在1到51的范围内,依此类推,直到剩下一张卡。 测试得到的交易我非常有信心这个代码能够以相同的概率产生任何交易能力,并且任何一张卡最终与四个玩家之一的机会等于0.25。 但由于我不知道RNGCryptoServiceProvider中使用的种子的强度,我想知道是否: 此代码将能够或可以适应生成2 ^ 96个不同的交易。 这段代码的下一笔交易不可预测。 编辑获得此问题中先前提到的随机数的方法存在缺陷。 如果这个代码能够产生2 ^ 96个不同的Bridge交易,这就分散了主要问题。 我用随机数字生成器替换了Stephen Taub和Shawn Farkas在MSDN杂志上发布的那个 用于生成加密安全随机数的代码,范围为1-52,1-51,依此类推,最高可达1-2,取自本网站 /// /// Returns a random number within a specified range. /// /// /// A 32-bit signed integer […]

在源代码中存储加密密钥有多安全?

此加密类是否足够安全? 或者有人可以反汇编我的二进制文件来找到密钥和IV吗? 我正在使用它来删除许可证文件,因此它不容易被破坏是非常重要的。 internal static class Encryptor { // Actual values are put here in my source private static readonly byte[] Key = { 0, 0, 0, 0, 0, 0, 0, 0 }; private static readonly byte[] Iv = { 0, 0, 0, 0, 0, 0, 0, 0 }; internal static String Encrypt(string source) { […]

如何为Base64应用填充

当我使用四个字母的单词作为输入时,我有以下代码可以正常工作,例如“测试”。 当输入不是4的倍数时,它会失败例如“MyTest”。 Eexception:Base-64 char数组的长度无效。 质询 是否保证加密结果始终与Unicode字符串兼容(没有任何损失)。 如果是,我可以使用UTF编码而不是Base64? 在编码方面,UTF8 / UTF16和Base64之间有什么区别 如何输入填充以便我们得到正确的结果(解密后),即使输入不是4的倍数? 主要的PRGORAM class Program { static void Main(string[] args) { string valid128BitString = “AAECAwQFBgcICQoLDA0ODw==”; string inputValue = “MyTest”; string keyValue = valid128BitString; byte[] byteValForString = Convert.FromBase64String(inputValue); EncryptResult result = Aes128Utility.EncryptData(byteValForString, keyValue); EncryptResult encyptedValue = new EncryptResult(); string resultingIV = “4uy34C9sqOC9rbV4GD8jrA==”; if (String.Equals(resultingIV,result.IV)) { int x […]

算法 – C#中的RijndaelManaged类是否等同于AES加密?

我问这个问题是为了确认C#中的RijndaelManaged类是否等同于AES加密。 从我读过的内容来看,RijndaelManaged是实现AES加密的首选算法。 有人可以确认一下吗? RijndaelManaged算法可以安全地用于Web项目吗? 谢谢 :)

如何在一个程序中使用AES加密,在另一个程序中解密

我被告知不要使用 RSA来加密简单文本,而是使用AES。 我找到了一段简单的代码来实现AES: public static class Crypto { #region Settings private static int _iterations = 2; private static int _keySize = 256; private static string _hash = “SHA1”; private static string _salt = “aselrias38490a32”; // Random private static string _vector = “8947az34awl34kjq”; // Random #endregion public static string Encrypt(string value, string password) { return Encrypt(value, […]

C#中的字节数组加密

我想使用按位运算符创建一个很好的加密。 但是我没有这样做。 我希望它有按位运算符使用字节数组来加密和解密我的字节数组。 public class Cryptographer { private byte[] Keys { get; set; } public Cryptographer(string password) { Keys = Encoding.ASCII.GetBytes(password); } public void Encrypt(byte[] data) { for(int i = 0; i < data.Length; i++) { data[i] = (byte) (data[i] & Keys[i]); } } public void Decrypt(byte[] data) { for (int i = 0; i […]

CMS在.NET中签名,证书链不在本地可信证书库中

我有存储在网络上的X509证书。 我可以从远程Windows证书库中读取链。 我需要签署一些数据并在签名中包含链,以便以后validation它。 问题是我找不到将证书链放到CsmSigner的方法。 我已经读过它从构造函数参数获取证书并尝试使用X509Chain.Build构建一个链。 它忽略了证书列表值并且(显然)失败,因为在本地Windows证书库中找不到证书。 请在下面找到我的测试代码(仅当证书本地保存到Windows证书库时才有效) protected byte[] SignWithSystem(byte[] data, X509Certificate2 cert, X509Certificate[] chain) { ContentInfo contentInfo = new ContentInfo(data); SignedCms signedCms = new SignedCms(contentInfo, true); CmsSigner cmsSigner = new CmsSigner(cert); cmsSigner.DigestAlgorithm = new Oid(“2.16.840.1.101.3.4.2.1”); //sha256 cmsSigner.IncludeOption = X509IncludeOption.WholeChain; if (chain != null) { //adding cert chain to signer cmsSigner.Certificates.AddRange(chain); signedCms.Certificates.AddRange(chain); } signedCms.ComputeSignature(cmsSigner); //fails […]

这种生成随机数的方法有多“好”?

我在google上搜索RNGCryptoServiceProvider,其中包含如何限制Max和Min之间范围的示例,并且仍能获得均匀分布。 在我使用模运算符之前,但有时我得到奇怪的值(高于Max)…无论如何这个代码(信用到未知)种子随机使用来自RNGCCryptoServiceProvider的新种子,每次调用该方法。 你们有什么感想? public static int GetRandom(int min, int max) { byte[] b = new byte[sizeof(int)]; new System.Security.Cryptography.RNGCryptoServiceProvider().GetBytes(b); int i = BitConverter.ToInt32(b, 0); Random r = new Random(i); return r.Next(min, max); }

如何存储用于加密文件的密钥

我正在玩一个应用程序将文件备份到“云”:)我想在存储之前加密文件。 我已经介绍过这部分,但是由于这个应用程序将监视文件夹以进行更改并上传更改的文件,我需要存储用于加密文件的密钥。 想法是用户提供密码并生成密钥。 目前我正在使用.NET Framework进行加密。 我正在使用RijndaelManaged类来加密/解密,而使用PasswordDeriveBytes类来获取密钥。 但是,我应该如何保留用于加密文件的密钥? 我也希望程序从Windows开始,而不需要让用户再次输入密码。

免费加密库

什么是最稳定和最有用的密码学库,它们是: 用/写的python,c ++,c#,。net opensource,GNU或其他免费许可