PHP代码:
echo hash('sha256', 'jake');
PHP输出:
cdf30c6b345276278bedc7bcedd9d5582f5b8e0c1dd858f46ef4ea231f92731d
Java代码:
String s = "jake";
MessageDigest md = MessageDigest.getInstance("SHA-256");
md.update(s.getBytes(Charset.forName("UTF-8")));
byte[] hashed = md.digest();
String s2 = "";
for (byte b : hashed) {
s2 += b;
}
System.out.println(s2);
Run Code Online (Sandbox Code Playgroud)
Java输出:
-51-1312107528211839-117-19-57-68-19-39-43884791-1141229-4088-12110-12-223531-11011529
我曾预料到两者会返回相同的结果.显然,事实并非如此.我怎样才能让两者相匹配或者不可能?
编辑:我犯了一个错误,认为我现在已经回答了这个问题.
只是寻找一些建议.我有一个拥有大约2500名用户的网站 - 规模虽小但正在增长.我在密码上使用SHA1加密来构建它.我已经阅读过SHA1是不安全的,并希望改为使用Salt来说SHA256.
有没有人对如何进行这样的转换有任何建议?如果我可以解密密码并重新哈希它们但它似乎没有能力,那就太好了.
亚当
我正在努力找到一个很好的库来计算sha256.我发现已经有很多选择
crypto ++:http://www.cryptopp.com/
openSSL:http://www.openssl.org/
MIRACL:http://www.shamus.ie/
我更喜欢一个知名的,广泛工业化的库,适用于所有操作系统,而不是最有效的库.
你对我推荐什么?(随意在我未提及的图书馆推荐).
任何人都可以告诉我为什么亚马逊想要hmac-sha1/sha256哈希的base64?
http://docs.amazonwebservices.com/AmazonSimpleDB/latest/DeveloperGuide/HMACAuth.html
我知道base64是用ascii表示二进制日期,但sha1/sha256已经是ascii - 我的意思是它唯一的十六进制.
谢谢
蒂莫
我在Java中有以下代码:
byte[] secretKey = secretAccessKey.getBytes("UTF-8");
SecretKeySpec signingKey = new SecretKeySpec(secretKey, "HmacSHA256");
Mac mac = Mac.getInstance("HmacSHA256");
mac.init(signingKey);
byte[] bytes = data.getBytes("UTF-8");
byte[] rawHmac = mac.doFinal(bytes);
String result = javax.xml.bind.DatatypeConverter.printBase64Binary(rawHmac);
Run Code Online (Sandbox Code Playgroud)
以及C#中的以下代码:
UTF8Encoding enc = new UTF8Encoding();
byte[] secretKey = enc.GetBytes(secretAccessKey);
HMACSHA256 hmac = new HMACSHA256(secretKey);
hmac.Initialize();
byte[] bytes = enc.GetBytes(data);
byte[] rawHmac = hmac.ComputeHash(bytes);
string result = Convert.ToBase64String(rawHmac);
Run Code Online (Sandbox Code Playgroud)
字节数组"secretKey"和"bytes"是等效的,但字节数组"rawHmac"是不同的,字符串"result"是不同的.谁能明白为什么?
在Windows 2003服务器上使用VS 2008和.Net Framework 3.5.
为了安全起见,我们使用SAML实施了SSO.我们在服务提供商端工作,我们验证从客户端系统生成的签名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())
return "Invalid Signature";
}
catch (Exception ex)
{
return ex.Message;
}
return string.Empty;
}
Run Code Online (Sandbox Code Playgroud)
现在,当我为这个新客户尝试相同的代码(使用签名算法rsa-sha256h)时 - 这不起作用,我收到错误"无法为提供的签名算法创建SignatureDescription."
在过去2-3天内浏览了许多博客和文章,我发现SignedXml不支持sha256.精细.但接下来是什么.在其提到的某个地方使用WIF,我也检查过并试过这个.
我也在尝试使用RSAPKCS1SignatureDeformatter的VerifySignature方法.但不确定要传递的两个参数是什么.
内置的HASH()函数使用什么样的哈希算法?
我理想地寻找SHA512/SHA256哈希,类似于SHA()函数在猪的linkedin datafu UDF中提供的哈希.
由于Windows更改了他们的安全策略,我们计划使用SHA-256算法而不是SHA-1开始代码签名驱动程序文件.但是,我们仍然希望能够支持仍需要SHA-1签名的旧操作系统.
使用Microsoft,signtool.exe我们可以使用/ fd标志使用SHA-1和SHA-256摘要算法成功编码签名文件.但是,如果可能,我们希望同时使用两种算法对文件进行签名.这甚至可能吗?我们希望避免使用不同算法签名的多组驱动程序,并根据操作系统确定要安装的设置 - 这将是我们的替代方法.
如果有人有完成此任务的经验,请解释您采取的方法.如果这是不可能的,那么可以理解为什么不可能的解释.
我正在尝试为文件生成SHA-256哈希.
我使用了https://www.npmjs.com/package/crypto-js库.请看下面的代码.
import { Component, OnInit } from '@angular/core';
var SHA256 = require("crypto-js/sha256");
@Component({
moduleId: module.id,
selector: 'dashboard',
templateUrl: './dashboard.component.html',
styleUrls: ['./dashboard.component.css']
})
export class DashboardComponent implements OnInit {
hash: string;
constructor() { }
ngOnInit() {}
onFilesChange(fileList : Array<File>){
this.fileList = fileList;
console.log(fileList);
for(var file in fileList){
this.hash = SHA256(file);
console.log(this.hash.toString());
}
}
}
Run Code Online (Sandbox Code Playgroud)
文件:sha-256的文件 ,上面的代码我得到了sh256 hash:5feceb66ffc86f38d952786c6d696c79c2dbc239dd4e91b46729d73a27fb57e9
但我参考了许多在线网站,如http://onlinemd5.com/,http://www.online-convert.com/,https://md5file.com/calculator
表格在线网站我在sha256哈希下面:27bb4358e847d559bed9f34eeee51ca71f51542afb0de4017b80dd66a0656eca
任何人都可以告诉我为什么我会得到不同的哈希?
我们正在整合通用应用链接。该设置需要一个名为的文件assetlinks.json上传到 Web 服务,以便可以验证关联。
为调试版本生成指纹时,将使用默认值debug.keystore。这意味着每个开发人员将拥有不同的 SHA256 指纹。
显然,让每个开发人员生成指定给他或她的机器的指纹,然后将其添加到文件中的sha256_cert_fingerprints数组assetlinks.json是不可能的。
是否可以对assetlinks.json文件或我们可以使用的进程进行修改,以便在调试时测试通用应用程序链接可以在任何开发人员机器上运行?