Tag: sha256

SHA256哈希计算

对于我的雇主,我必须为他们下载的某些文件提供带有校验和的网络应用程序的客户。 我想向用户提供他们的客户端工具也可能生成的哈希值,因此我一直在比较在线哈希工具。 我的问题是关于它们的散列forms,因为它们不同,奇怪的是。 经过快速搜索,我测试了5: http://www.convertstring.com/Hash/SHA256 http://www.freeformatter.com/sha256-generator.html#ad-output http://online-encoder.com/sha256-encoder-decoder.html http://www.xorbin.com/tools/sha256-hash-calculator http://www.everpassword.com/sha-256-generator 输入值’test’(之后没有’enter’)所有5给我相同的SHA256结果。 然而,这里开始了一件奇特的事情,当我输入值’test [enter] test’(所以两行)时,在线工具1,2和3给我相同的SHA256哈希值,而站点4和5给我一个不同的哈希值(所以1,2和3相等,4和5相等)。 这很可能与工具或底层代码处理\ r \ n的方式有关,或者至少我认为如此。 巧合的是,站点1,2和3为我提供了与我的C#代码相同的哈希: var sha256Now = ComputeHash(Encoding.UTF8.GetBytes(“test\r\ntest”), new SHA256CryptoServiceProvider()); private static string ComputeHash(byte[] inputBytes, HashAlgorithm algorithm) { var hashedBytes = algorithm.ComputeHash(inputBytes); return BitConverter.ToString(hashedBytes); } 问题是:哪些网站“正确”? 有没有办法知道散列是否符合标准? UPDATE1:将编码更改为UTF8。 这对创建的输出哈希没有影响。 谢谢@Hans。 (因为我的Encoding.Default可能是Encoding.UTF8) 更新2:也许我应该稍微扩展一下这个问题,因为它可能没有得到解释,对不起。 我想我要问的更多的是可用性问题,而不是技术问题; 我应该提供具有不同行结尾的所有哈希吗? 或者我应该坚持一个? 客户端可能会打电话给我的公司,如果他们有不同的计算哈希方式,他们会以某种方式改变他们的文件。 这通常如何解决?

SHA256给出44长度输出而不是64长度

我正在使用以下代码来执行SHA256。 public static string GenerateSaltedHash(string plainTextString, string saltString) { byte[] salt = Encoding.UTF8.GetBytes(saltString); byte[] plainText = Encoding.UTF8.GetBytes(plainTextString); HashAlgorithm algorithm = new SHA256Managed(); byte[] plainTextWithSaltBytes = new byte[plainText.Length + salt.Length]; for (int i = 0; i < plainText.Length; i++) { plainTextWithSaltBytes[i] = plainText[i]; } for (int i = 0; i < salt.Length; i++) { plainTextWithSaltBytes[plainText.Length + […]

如何创建匹配的HMAC值以validation.NET中的Shopify WebHook?

我已经设置了一个端点来接收Shopify的webhook请求。 Shopify的请求包括从共享密钥和请求正文创建的HMAC标头。 我需要在服务器上计算HMAC并将其与请求标头中的值相匹配,以确保请求是可信的。 我似乎无法在.NET中创建适当的机制来创建匹配的HMAC值。 我的算法在这一点如下: public static string CreateHash(string data) { string sharedSecretKey = “MY_KEY”; byte[] keyBytes = Encoding.UTF8.GetBytes(sharedSecretKey); byte[] dataBytes = Encoding.UTF8.GetBytes(data); //use the SHA256Managed Class to compute the hash System.Security.Cryptography.HMACSHA256 hmac = new HMACSHA256(keyBytes); byte[] hmacBytes = hmac.ComputeHash(dataBytes); //retun as base64 string. Compared with the signature passed in the header of the post […]

是否有针对.NET的FIPS兼容的密钥SHA256哈希算法?

我正在使用HMACSHA256创建一个带键的SHA256哈希,代码如下: HMACSHA256 hmac = new HMACSHA256(Encoding.UTF8.GetBytes(secretKey); byte[] hash = hmac.ComputeHash(Encoding.UTF8.GetBytes(data)); string hashResult = string.Empty; for (int i = 0; i < hash.Length; i++) { hashResult += hash[i].ToString("x2"); // hex format } 这工作得很好,但是,它在启用FIPS的环境中失败,因为HMACSHA256使用的底层SHA256Managed实现本身不符合FIPS。 通过MSDN文档搜索,我发现KeyedHashAlgorithm的唯一SHA256实现是HMACSHA256。 我需要使用键控SHA256哈希来签署Web服务请求(因此我无法更改哈希类型),并且我必须能够在启用FIPS的环境中运行。 谷歌搜索显示SHA256CryptoServiceProvider和SHA256Cng都是符合FIPS标准的创建SHA256哈希的方法,但似乎都不支持创建键控哈希。

密码哈希 – 为什么要盐60,000次

我正在为一家财富100强企业工作,我将面临从SHA1到SHA-2的安全任务。 这不是我的专业领域,但在我研究密码学时,我质疑过时的信息…… 显然需要SHA-2而不是SHA-1,但是当安全团队知道密码+盐的散列使用SHA时,GPU在破解数十亿个哈希时非常快速 – 我不知道为什么密码我不是被告知使用bcrypt或其他慢速的等效物,为什么? 我看到了一张幻灯片,我被告知要制作我的盐60,000次。 我搜索了整个互联网,我没有看到任何这样的建议或例子。 为什么? 我正在使用C# string SaltAndPwd = string.Concat(plainTextPassword, salt); SHA256 sha2 = SHA256Managed.Create(); byte[] buff = sha2.ComputeHash(Encoding.Unicode.GetBytes(SaltAndPwd)); 我想我并没有被告知反复创建一个盐,而是一遍又一遍地创建哈希。 这个逻辑是否合适? string plainTextPassword = “aF7Cvs+QzZKM=4!”; string salt = “o9kc5FvhWQU==”; SHA256 sha2 = SHA256Managed.Create(); for(var i = 0; i <= 60000; i++) { byte[] buff = sha2.ComputeHash(Encoding.Unicode.GetBytes(SaltAndPwd)); } 如何使此散列正常工作? 更新发现了powerpoint幻灯片 使用代码更新 – validation哈希的实现问题 […]

SHA256哈希值是否总共有64个字符?

我正在设置我的数据库以接收散列密码而不接受纯文本。 我会这样做吗? create table User( username varchar(20) not null, password varchar(64) not null, );

SSO SAML的签名XML签名validation(使用sha256)

在Windows 2003服务器上使用VS 2008和.Net Framework 3.5。 为了安全起见,我们使用SAML实施了SSO。 我们在服务提供商端工作,我们validation从客户端系统生成的签名XML SAML Assertuib令牌。 截至目前,我们遇到的任何签名文件都使用了签名算法“rsa-sha1”,但现在我们有新客户发送带有签名算法的文件“rsa-sha256”,这就是问题的开始。 public static string VerifySignature() { if (m_xmlDoc == null) return “Could not load XMLDocument “; try { XmlNamespaceManager nsm = new XmlNamespaceManager(new NameTable()); nsm.AddNamespace(“dsig”, SignedXml.XmlDsigNamespaceUrl); XmlElement sigElt = (XmlElement)m_xmlDoc.SelectSingleNode( “//dsig:Signature”, nsm); // Load the signature for verification SignedXml sig = new SignedXml(m_xmlDoc); sig.LoadXml(sigElt); if (!sig.CheckSignature()) […]

无法使用.netvalidationJSON Web令牌 – 密钥短

我使用JSONWebToken npm模块生成一个jot: var jwt = require(‘jsonwebtoken’); var payload = { “iss”: “https://secure.example.com/”, “exp”: 1410819380, “http://example.com/orgnum”: “987987987”, “http://example.com/user”: “me@example.com” }; var token = jwt.sign(payload, ‘secret’); console.log(token); 这给了我以下输出: eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwczovL3NlY3VyZS5leGFtcGxlLmNvbS8iLCJleHAiOjE0MTA4MTkzODAsImh0dHA6Ly9leGFtcGxlLmNvbS9vcmdudW0iOiI5ODc5ODc5ODciLCJodHRwOi8vZXhhbXBsZS5jb20vdXNlciI6Im1lQGV4YW1wbGUuY29tIiwiaWF0IjoxNDA4Mzk0Mjk2fQ.5X5LTg4wxDF2p49xtsRcG4S9Yk4qSfW1tMEU0AquBhc 由于我没有指定我想要的算法,因此它使用SHA256。 现在,我尝试在c#中validation这一点。 这简直不容易…… 我得到一个关于密钥大小的例外: IDX10603:’System.IdentityModel.Tokens.InMemorySymmetricSecurityKey’不能小于:’128’位。 Parameternavn:key.KeySize实际大小为48。 我尝试扩展密钥,在创建对称密钥时出现新错误: Base-64 char数组或字符串的长度无效 我认为这与我告诉.net代码关于我的密钥的方式有关。 由于SymmetricKeyIssuerSecurityTokenProvider构造函数参数名为base64Key ,因此我尝试对我的密钥进行Base64Url编码: var secret = Base64UrlEncoder.Encode(“secret”); TokenValidationParameters validationParameters = new TokenValidationParameters { ValidateIssuer = false, ValidateAudience = false, […]

C#SHA-256与Java SHA-256。 结果不同?

我想将一些Java中的代码转换为C#。 Java代码: private static final byte[] SALT = “NJui8*&N823bVvy03^4N”.getBytes(); public static final String getSHA256Hash(String secret) { try { MessageDigest digest = MessageDigest.getInstance(“SHA-256”); digest.update(secret.getBytes()); byte[] hash = digest.digest(SALT); StringBuffer hexString = new StringBuffer(); for (int i = 0; i < hash.length; i++) { hexString.append(Integer.toHexString(0xFF & hash[i])); } return hexString.toString(); } catch (NoSuchAlgorithmException e) { e.printStackTrace(); } […]

如何使用带有RSA私钥的RS256在C#中创建加密的JWT

我正在使用jose-jwt库,并希望使用RS256算法在C#中创建加密的JWT进行加密。 我没有密码学的经验,所以请原谅我的无知。 我在文档中看到以下示例: var payload = new Dictionary() { { “sub”, “mr.x@contoso.com” }, { “exp”, 1300819380 } }; var privateKey=new X509Certificate2(“my-key.p12”, “password”, X509KeyStorageFlags.Exportable | X509KeyStorageFlags.MachineKeySet).PrivateKey as RSACryptoServiceProvider; string token=Jose.JWT.Encode(payload, privateKey, JwsAlgorithm.RS256); 它显示了使用p12文件,但是如何使用下面表格的RSA密钥文件? 我正在查看X509Certificate2的文档,但我看不到RSA私钥的选项。 它似乎只接受PKCS7 ,我理解为公钥。 —–BEGIN RSA PRIVATE KEY—– MIICXAIBAAKBgQCqGKukO1De7zhZj6+H0qtjTkVxwTCpvKe4eCZ0FPqri0cb2JZfXJ/DgYSF6vUp wmJG8wVQZKjeGcjDOL5UlsuusFncCzWBQ7RKNUSesmQRMSGkVb1/3j+skZ6UtW+5u09lHNsj6tQ5 1s1SPrCBkedbNf0Tp0GbMJDyR4e9T04ZZwIDAQABAoGAFijko56+qGyN8M0RVyaRAXz++xTqHBLh 3tx4VgMtrQ+WEgCjhoTwo23KMBAuJGSYnRmoBZM3lMfTKevIkAidPExvYCdm5dYq3XToLkkLv5L2 pIIVOFMDG+KESnAFV7l2c+cnzRMW0+b6f8mR1CJzZuxVLL6Q02fvLi55/mbSYxECQQDeAw6fiIQX GukBI4eMZZt4nscy2o12KyYner3VpoeE+Np2q+Z3pvAMd/aNzQ/W9WaI+NRfcxUJrmfPwIGm63il AkEAxCL5HQb2bQr4ByorcMWm/hEP2MZzROV73yF41hPsRC9m66KrheO9HPTJuo3/9s5p+sqGxOlF L0NDt4SkosjgGwJAFklyR1uZ/wPJjj611cdBcztlPdqoxssQGnh85BzCj/u3WqBpE2vjvyyvyI5k X6zk7S0ljKtt2jny2+00VsBerQJBAJGC1Mg5Oydo5NwD6BiROrPxGo2bpTbu/fhrT8ebHkTz2epl U9VQQSQzY1oZMVX8i1m5WUTLPz2yLJIBQVdXqhMCQBGoiuSoSjafUhV7i1cEGpb88h5NBYZzWXGZ 37sJ5QsW+sJyoNde3xH8vdXhzU7eT82D6X/scw9RZz+/6rCJ4p0= —–END RSA PRIVATE KEY—– 最后, […]