Tag: 加密

如何使用C#中的PBKDF2 HMAC SHA-256或SHA-512在salt和迭代中散列密码?

我想找到一个解决方案或方法,允许我添加盐并控制迭代次数。 原生Rfc2898DeriveBytes基于HMACSHA1。 理想情况下,使用SHA-256或SHA-512将使系统面向未来。 这是我到目前为止找到的最好的例子: http : //jmedved.com/2012/04/pbkdf2-with-sha-256-and-others/但是当我使用SHA-256运行它时实际上比SHA-512。 我使用了64k迭代,一个盐的guid和不同长度的密码进行比较。 我也找到了这个解决方案: http : //sourceforge.net/projects/pwdtknet/ ,它有完整的源代码。 它看起来更强大。 到目前为止,我无法从它们中获得相同的输出。

将数据放入cookie中是否安全?

我正在使用asp.net mvc 2.0,我想知道将信息放入cookie有多安全? 就像我在我的cookie中放入一个加密的表单身份validation票据,这样我可以将那些可能敏感的信息放在那里吗? string encryptedTicket = FormsAuthentication.Encrypt(authTicket) HttpCookie authCookie = new HttpCookie(FormsAuthentication.FormsCookieName, encryptedTicket); 就像我没有存储密码或类似的东西,但我想存储UserId,因为目前每次用户向我的网站发出请求时,我必须进行查询并获取用户Userid,因为我的数据库中的每个表都需要你使用userId获取正确的行。 所以这些开始快速加起来所以我宁愿拥有它,如果用户被认证一次,那就是它,直到他们需要再次重新认证。 如果我将存储此userId,我可以将如此多的请求保存到数据库。 然而,我不希望它以明文forms出现,因为潜在的人可能会使用它来尝试从数据库中获取一行,而实际上它们不应该存在。 显示身份validation使用的加密有多好?

CNG,CryptoServiceProvider和HashAlgorithm的托管实现

所以我想知道哈希算法的各种实现之间是否存在任何重大差异,例如以SHA系列算法为例。 它们每个都有3个实现,1个托管代码和2个围绕不同本机加密API的包装器,但使用它们之间有什么主要区别吗? 我可以想象包装器版本可以具有更高的性能,因为它在本机代码中执行,但是他们都需要执行完全相同的计算,从而提供相同的输出,即嘿是可互换的。 它是否正确? 例如,SHA512CNG无法用于XP SP2(文档错误),但SHA512MANAGED可以。 @Maxim – 谢谢,但不是我要求的。 我问的是,使用给定哈希算法的Managed / CryptoServiceProvider / CNG实现,除了可能的性能之外是否存在任何差异。 使用.NET 3.5,您可以获得具有三种实现的所有哈希算法,因此 SHA512Managed SHA512CryptoServiceProvider SHA512Cng 后两者是本机API的包装器。 例如,对于所有SHAxxx实现都是如此。

ProtectedData.Protect(DPAPI)的安全性如何?

假设有人访问我的所有硬盘,我想弱点将是我的Windows密码。 在不知道/无法检索到的情况下,数据应该非常安全,不是吗? 我特别要求,因为维基百科中的EFS条目表明了这一点 在Windows 2000中,本地管理员是默认的数据恢复代理,能够解密任何本地用户使用EFS加密的所有文件。 和EFS碰巧使用DPAPI。 这同样适用于我自己使用此保护的数据: ProtectedData.Protect(plain, null, DataProtectionScope.CurrentUser); 如果确实如此,我怎么能阻止它呢? [编辑] NB我正在尝试存储winforms应用程序的凭据,这样用户每次登录时都不必输入密码。 换句话说,如果有人能够以该用户身份登录(即知道用户密码),那么他们也可以读取加密数据。 哪个 – 不是来自Windows背景 – 现在让我想知道 – 无论如何本地管理员都不能像任何本地用户一样登录? 在这种情况下,我不应该担心管理员无论如何都能够检索密码…… [Edit2]谷歌透露,看起来管理员不能像任何用户一样登录而不首先重置/更改密码。 所以我的问题似乎仍然相关……

使用PHP和c#的Mcrypt和base64

我已经在两个平台上编写了相同的方法,我认为这些方法应该会产生相同的结果但不会发生。 我用相同的密钥加密了相同的文本,结果不同。 有人能弄清楚为什么会这样吗? 字符串: 这是测试 密钥: 1234567812345678 PHP加密字符串: ybUaKwQlRNwOjJhxLWtLYQ == C#加密字符串: r2YjEFPyDDacnPmDFcGTLA == C#function static string Encrypt(string plainText, string key) { string cipherText; var rijndael = new RijndaelManaged() { Key = Encoding.UTF8.GetBytes(key), Mode = CipherMode.ECB, BlockSize = 128, }; ICryptoTransform encryptor = rijndael.CreateEncryptor(rijndael.Key, rijndael.IV); using (var memoryStream = new MemoryStream()) { using (var cryptoStream = […]

c#AES解密

我正在使用SagePay Forms,目前正在将他们的VB示例转换为c#。 我取得了很好的进展,所以我项目的加密部分工作正常(SagePay可以解密)。 我遇到的问题是,当我尝试解密字符串时,它会变成垃圾。 如果有人这样做之前我真的很感激我的解密代码的一些帮助。 我已经包含了有效的加密代码,前两行是来自另一种方法的设置和调用。 我没有添加VB代码,但如果需要,我可以添加它。 如果不需要,不想要一个巨大的post。 实用方法: public string byteArrayToHexString(byte[] ba) { return BitConverter.ToString(ba).Replace(“-“, “”); } public static byte[] StringToByteArray(string hex) { return Enumerable.Range(0, hex.Length) .Where(x => x % 2 == 0) .Select(x => Convert.ToByte(hex.Substring(x, 2), 16)) .ToArray(); } 主加密方法,前几行是从较大的方法中提取的调用。 string crypt = “blahblahblah” string EncryptAndEncode = “@” + byteArrayToHexString(aesEncrypt(crypt)); private byte[] aesEncrypt(string […]

C#中的非对称加密示例

我需要通过TCP连接将机密数据发送到服务器。 我做了很多研究,理解了理论部分。 根据我研究的内容,我想做以下事情: 注意有一个服务器和一个客户端:(我们假设任何人都可以获得客户端或服务器的公钥) 客户端创建他的公钥和私钥。 他能够使用他的私钥加密并使用他的公钥解密。 服务器创建他的公钥和私钥。 私钥用于解密消息,公钥用于加密消息。 (注意与客户端相反) 客户端获取服务器的公钥。 然后,客户端将能够使用该密钥加密消息,并且唯一能够解密该消息的消息将是服务器的私钥。 由于服务器需要确定消息来自该特定客户端,因此客户端将使用其私钥加密其名称(签名)。 因此客户端消息将包含:要发送的数据,客户端的公钥,使用客户端私钥加密的客户端名称。 客户端将使用来自服务器的公钥加密消息。 然后,客户端将该消息发送到服务器。 服务器将使用他的私钥解密刚刚收到的消息。 一旦消息被解密,它将包含来自客户端的数据(信息),加密签名,公钥。 最后,服务器将使用消息中包含的公钥解密客户端签名,以validation消息是否来自该客户端。 好的,这就是非对称加密的工作原理。 我还研究过使用.NET框架创建密钥对的类。 我研究过的可以创建这个公钥和私钥对的类是: System.Security.Cryptography.DES System.Security.Cryptography.DSACryptoServiceProvider System.Security.Cryptography.ECDsa System.Security.Cryptography.ECDsaCng System.Security.Cryptography.ECDiffieHellman System.Security.Cryptography.ECDiffieHellmanCng System.Security.Cryptography.RSA System.Security.Cryptography.RSACryptoServiceProvider 所以现在我的问题出现在如何使用其中一个类来使用C#来实现它? 我理解理论部分是如何工作的,但我怎么做我刚才用代码描述的东西。 我已经研究了一些例子,但我很难理解它们。 这是一个例子,我发现我相信我所描述的: using System; using System.IO; using System.Security.Cryptography; using System.Text; namespace Example { class Program { static CngKey aliceKey; static CngKey bobKey; static byte[] […]

AES加密和C#

从我的阅读中我不确定AES是否是一种可以使用不同长度密钥或一系列类似算法的单一标准化算法? 我的意思是,如果我发现任何2个AES实现采用128位密钥,我是否应该相信它们的工作方式相同(除了错误)? 特别是在.Net / C#中,我很困惑为什么有两个抽象基类System.Security.Cryptography.Aes : System.Security.Cryptography.AesCryptoServiceProvider和System.Security.Cryptography.AesManaged 。 然后似乎AES和Rijndael之间有区别/重叠,.NET有Rijndael和RijndaelManaged类,以及RijndaelManagedTransform 所有这些之间的区别是什么? 我注意到AES类似乎只存在于.NET 3.5之后,而Rijndael从1.0开始就存在 对不起,如果这些都是愚蠢的问题,除了安全散列函数之外,我是加密的新手。

从x509Certificate2初始化RSACryptoServiceProvider的最佳方法?

从X509Certificate2启动新的RSACryptoServiceProvider对象的最佳方法是什么?我从密钥库中取出了什么? 证书与公共(用于加密)和私有(用于解密)密钥相关联。 我目前正在使用FromXmlString方法,但必须有更好的方法。 谢谢

如何在PHPunit testing中获得与C#相同的HMAC256结果?

我以为我会尝试将新的签名请求逻辑添加到我的Facebookcanvas应用程序中,以使我自己“轻松”我在GitHub上访问facebook PHP sdk并查看unit testing 。 我的实际问题是我无法获得请求中包含的哈希值,以匹配我使用应用程序机密计算的哈希值以及请求中发送的数据。 在Facebook的身份validation页面上描述了这是如何工作的 。 private string VALID_SIGNED_REQUEST = “ZcZocIFknCpcTLhwsRwwH5nL6oq7OmKWJx41xRTi59E.eyJhbGdvcml0aG0iOiJITUFDLVNIQTI1NiIsImV4cGlyZXMiOiIxMjczMzU5NjAwIiwib2F1dGhfdG9rZW4iOiIyNTQ3NTIwNzMxNTJ8Mi5JX2VURmtjVEtTelg1bm8zakk0cjFRX18uMzYwMC4xMjczMzU5NjAwLTE2Nzc4NDYzODV8dUk3R3dybUJVZWQ4c2VaWjA1SmJkekdGVXBrLiIsInNlc3Npb25fa2V5IjoiMi5JX2VURmtjVEtTelg1bm8zakk0cjFRX18uMzYwMC4xMjczMzU5NjAwLTE2Nzc4NDYzODUiLCJ1c2VyX2lkIjoiMTY3Nzg0NjM4NSJ9”; private string NON_TOSSED_SIGNED_REQUEST = “laEjO-az9kzgFOUldy1G7EyaP6tMQEsbFIDrB1RUamE.eyJhbGdvcml0aG0iOiJITUFDLVNIQTI1NiJ9”; public void SignedRequestExample() { var Encoding = new UTF8Encoding(); string ApplicationSecret = “904270b68a2cc3d54485323652da4d14”; string SignedRequest = VALID_SIGNED_REQUEST; string ExpectedSignature = SignedRequest.Substring(0, SignedRequest.IndexOf(‘.’)); string Payload = SignedRequest.Substring(SignedRequest.IndexOf(‘.’) + 1); // Back & Forth with Signature byte[] ActualSignature = […]