我正在开发一个使用一些REST Web服务的应用程序.它的技术文档说我应该在请求中传递一些字符串的SHA256哈希值.
在示例请求中(在文档中)一个字符串:
HN-Rw2ZHYwllUYkklL5Zo_7lWJVkrbShZPb5CD1expires = 1893013926label [0] =任何/ somestatistics = 1D,2D,7D,28D,30D,31D,lifetimestatus = UPL,livetitle =一
执行后:
digest = Digest::SHA256.digest(string_to_sign)
signature = Base64::encode64(digest).chomp.gsub(/=+$/, '')
Run Code Online (Sandbox Code Playgroud)
导致哈希:
YRYuN2zO + VvxISNp/vKQM5Cl6Dpzoin7mNES0IZJ06U
这个例子是ruby,因为文档适用于ruby开发人员.
当我执行时,我正在用C#和完全相同的字符串开发我的应用程序:
byte[] rawHash = sha256.ComputeHash(rawRequest, 0, rawRequest.Length);
string friendlyHash = Convert.ToBase64String(rawHash);
Run Code Online (Sandbox Code Playgroud)
并删除尾随的"="符号,我得到:
Vw8pl/KxnjcEbyHtfNiMikXZdIunysFF2Ujsow8hyiw
因此,应用程序无法执行导致签名不匹配错误.
我已经尝试在将字符串转换为散列之前的字节数组时更改编码,并且没有任何更改.
有任何想法吗?
新手在这里.我正在尝试使用SHA-256加密用户密码,然后当用户尝试登录时,它会尝试将其输入与mysql数据库中的任何加密密码相匹配.我想知道是否有人可以给我一个示例代码?
我正在尝试使用$ salt变量创建sha256哈希值的密码.但由于某种原因它只是不起作用.现在已经工作了3个小时,我即将扯下头来.这是我的代码:
我会再试一次,抱歉; o)
好吧,我的脚本工作正常,直到我尝试将sha256添加到密码.我有一个用于创建用户的文件,它是:
$salt = "lollol";
$password = hash('sha256', $salt.$_POST['password']);
$sql = ("INSERT INTO members (username, password, name, last_name,company)VALUES('$username', '$password', '$name', '$last_name', '$company')")or die(mysql_error());
if(mysql_query($sql))
echo "Your accuont has been created.";
Run Code Online (Sandbox Code Playgroud)
它似乎正确地添加到数据库中.我可以看到它正在用一些字母和数字进行哈希处理.
但是当我尝试登录时,它就不会.
我的login.php代码是:
$sql= "SELECT * FROM members WHERE username='$username' and password='$password'";
$result=mysql_query($sql);
$row=mysql_fetch_array($result);
$username = mysql_real_escape_string($_POST['username']);
$password = $_POST['password'];
$salt = "lollol";
$auth_user = hash('sha256', $salt.$password);
if($password == $salt.$auth_user){
echo "Logged in";
} else {
echo "Not logged in";
}
Run Code Online (Sandbox Code Playgroud)
我明白了,当我想登录时我必须加密密码,但我不确定.我希望你们中的一些人可以帮助我.
我正在使用ColdFusion创建一个登录表单,但我无法弄清楚在我的表中检查使用SHA256加密的密码的语法.我研究了这个,到目前为止只找到了复杂的答案,大多与我需要的无关.
这是我的查询代码:
<cfquery name="qVerify" datasource="MyDSN">
SELECT *
FROM cryptuser
WHERE firstname = '#firstname#'
AND password = '#password#'
</cfquery>
Run Code Online (Sandbox Code Playgroud)
因此,通过表格输入和发布的密码需要与我表格中加密的密码相匹配,是否有人知道这是否可行?
非常感谢.
背景:我需要从Python脚本和Java Web应用程序计算迭代哈希算法.
Psuedo代码:
hash = sha256(raw)
for x=1 to 64000 hash = sha256(hash)
Run Code Online (Sandbox Code Playgroud)
其中hash是长度为32的字节数组,而不是长度为64的十六进制字符串.
我希望以字节为单位的原因是因为尽管Python可以在每次迭代之间转换为十六进制字符串并且将处理时间保持在一秒之内,但Java需要3秒才能获得字符串开销.
所以,Java代码看起来像这样:
// hash one time...
byte[] result = sha256(raw.getBytes("UTF-8"));
// then hash 64k-1 more times
for (int x = 0; x < 64000-1; x++) {
result = sha256(result);
}
// hex encode and print result
StringBuilder sb = new StringBuilder();
Formatter formatter = new Formatter(sb);
for (int i=0; i<buf.length; i++) {
formatter.format("%02x", buf[i]);
}
System.out.println(sb.toString());
Run Code Online (Sandbox Code Playgroud)
Python代码如下所示:
import hashlib
# hash 1 time...
hasher = hashlib.sha256() …Run Code Online (Sandbox Code Playgroud) 我想对node.js中的文件执行RSA-SHA512。我可以计算给定数据文件的sha512哈希值,该哈希值与openssl的匹配。但是,当尝试在同一哈希上获取数字签名时,node.js签名与openssl签名不同。以下是示例代码片段:
var data = new Buffer(512);
data = fs.readFileSync('/tmp/data');
var pem = fs.readFileSync('/tmp/boot2-prvKey.pem');
var privateKey = pem.toString('ascii');
var signer = crypto.createSign("RSA-SHA256");
signer.update(data);
var sign = signer.sign(privateKey, 'hex');
console.log("SIGN " + sign + '\n');
Run Code Online (Sandbox Code Playgroud)
Openssl命令对数据进行签名:
openssl rsautl -sign -in /tmp/data -inkey /tmp/boot2-prvKey.pem -out sig
Run Code Online (Sandbox Code Playgroud)
以上两种都生成不同的签名。
我有两个问题:1)我想计算文件的RSA-SHA256,因此我首先计算整个文件的sha256哈希,然后将此哈希作为输入传递给签名函数。那是正确的方法吗?2)如果是,那么上面的代码可能出了什么问题?如果没有,正确的方法是什么?
我正在使用的node.js版本是0.10.36,openssl版本是1.0,1。
我需要在C#中转换以下php代码:
$res = mac256($ent, $key);
$result = encodeBase64($res);
Run Code Online (Sandbox Code Playgroud)
哪里
function encodeBase64($data)
{
$data = base64_encode($data);
return $data;
}
Run Code Online (Sandbox Code Playgroud)
和
function mac256($ent,$key)
{
$res = hash_hmac('sha256', $ent, $key, true);//(PHP 5 >= 5.1.2)
return $res;
}
Run Code Online (Sandbox Code Playgroud)
我使用以下C#代码:
byte[] res = HashHMAC(ent, key);
string result = System.Convert.ToBase64String(res);
Run Code Online (Sandbox Code Playgroud)
哪里
public byte[] HashHMAC(string ent, byte[] key)
{
byte[] toEncryptArray =System.Text.Encoding.GetEncoding(28591).GetBytes(ent);
HMACSHA256 hash = new HMACSHA256(key);
return hash.ComputeHash(toEncryptArray);
}
Run Code Online (Sandbox Code Playgroud)
这个链接提供完整的php源代码
我也在php中检查了这篇文章hmac_sha256和c#的区别
但结果却不尽相同.
我正在将我的一个库移到Xamarin PLC.
官方文档声明支持System.Security.Cryptography命名空间,但它不在实际代码中.
我正在寻找一种计算没有这个命名空间的SHA256哈希的方法(并且在Windows命名空间中没有HashAlgorithmProvider.这种方法打破了Android和WP8.0的应用程序)
如何在AngularJS中生成HMAC-SHA256签名?
我找不到有关这个主题的任何消息来源.
我必须找到两个在URL中作为参数'str1'和'str2'传递的字符串,并满足这些条件?
if($_GET['str1'] !== $_GET['str2'] and $_GET['str1'] and $_GET['str2'])
{
$hash1 = hash('sha256', $salt . $_GET['str1']);
$hash2 = hash('sha256', $salt . $_GET['str2']);
if($hash1 === $hash2) {
#print str1 and str2
}
}
Run Code Online (Sandbox Code Playgroud)
我将如何查找?
sha256 ×10
hash ×4
php ×4
c# ×3
encryption ×2
hmac ×2
angularjs ×1
coldfusion ×1
cryptography ×1
hex ×1
java ×1
javascript ×1
node.js ×1
openssl ×1
python ×1
rsa ×1
ruby ×1
sha ×1
xamarin ×1