我有这个PHP代码生成一个HMAC(而不是一个简单的消息摘要):
<?php
$key = "0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF";
$binkey = pack("H*", $key);
echo strtoupper(hash_hmac('sha512', "ABC", $binkey));
?>
Run Code Online (Sandbox Code Playgroud)
并与ABC输入输出是:
100A6A016A4B21AE120851D51C93B293D95B7D8A44B16ACBEFC2D1C9DF02B6F54FA3C2D6802E52FED5DF8652DDD244788A204682D2D1CE861FDA4E67F2792643
Run Code Online (Sandbox Code Playgroud)
我需要在java中克隆它.
所以这是我目前的java克隆:
private String generateHMAC( String datas )
{
// final Charset asciiCs = Charset.forName( "utf-8" );
Mac mac;
String result = "";
try
{
byte[] bytesKey = PayboxConstants.KEY.getBytes( );
final SecretKeySpec secretKey = new SecretKeySpec( bytesKey, "HmacSHA512" );
mac = Mac.getInstance( "HmacSHA512" );
mac.init( secretKey );
final byte[] macData = mac.doFinal( datas.getBytes( ) );
byte[] hex = new Hex( …Run Code Online (Sandbox Code Playgroud) 在我的MySQL DB中,有一个定义如下的表:
CREATE TABLE `mytablex_cs` (
`id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
`tag` varchar(6) COLLATE utf8_bin NOT NULL DEFAULT '',
`value` text COLLATE utf8_bin NOT NULL,
PRIMARY KEY (`id`),
KEY `kt` (`tag`),
KEY `kv` (`value`(200))
) ENGINE=MyISAM AUTO_INCREMENT=7 DEFAULT CHARSET=utf8 COLLATE=utf8_bin
Run Code Online (Sandbox Code Playgroud)
我需要在value字段上实现UNIQUE约束(键)。
我知道尚无法在blobor或text字段的整个值上定义唯一索引,但是建议使用一个工单(?)来实现此功能(请参阅本页),建议使用以下方法创建唯一键:像已经为其他字段实现的哈希。
现在,我想使用一种类似的方法向表中添加另一个包含哈希的字段,并在该字段上创建唯一键。
我介绍了创建此哈希的可能方法,并且由于我想避免冲突(我需要插入几百万个条目),因此即使快速搜索给出,RIPEMD-160算法似乎也是最好的算法我有几种使用SHA256甚至SHA1和MD5的类似解决方案。
我完全缺乏密码学知识,那么选择这种方法的缺点是什么?
我有另一个问题:MySQL当前使用哪种算法创建哈希?
我正在尝试在linux上为开发人员安装cellprofiler,并获得一个名为"_sha256"的"无模块"错误.我在几个博客上找到了解决方案,但没有任何效果,有人可以帮我解决这个问题吗?
这是我的配置:
Python 2.7.3 (default, Aug 1 2012, 05:16:07)
[GCC 4.6.3] on linux2
Run Code Online (Sandbox Code Playgroud)
linux:
uname -m
i686
Distributor ID: Ubuntu
Description: Ubuntu 12.04.2 LTS
Release: 12.04
Codename: precise
Run Code Online (Sandbox Code Playgroud)
这是我得到的错误:
local@pc-ellenberg23:~/Softwares/cellProfiler/CellProfiler$ make -f Makefile.CP2 PREFIX="${HOME}/usr/cp2"
All pre-checks executed successfully.
export PATH="/home/local/usr/cp2/bin:/usr/lib/lightdm/lightdm:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/lib/jvm/java-7-openjdk-i386/bin:/usr/lib/jvm/java-7-openjdk-i386/bin:/usr/lib/jvm/java-7-openjdk-i386/bin" && \
export LD_LIBRARY_PATH="/home/local/usr/cp2/lib:${LD_LIBRARY_PATH}" && \
sh setuptools-0.6c11-py2.6.egg --prefix="/home/local/usr/cp2"
Traceback (most recent call last):
File "<string>", line 1, in <module>
File "/home/local/Softwares/cellProfiler/CellProfiler/setuptools-0.6c11-py2.6.egg/setuptools/command/easy_install.py", line 21, in <module>
File "/home/local/Softwares/cellProfiler/CellProfiler/setuptools-0.6c11-py2.6.egg/setuptools/package_index.py", line 2, in <module>
File "/home/local/usr/cp2/lib/python2.6/urllib2.py", line 93, in <module>
import hashlib …Run Code Online (Sandbox Code Playgroud) 我遇到过使用.NET Framework 4.5版的阻止程序来处理带有数字签名的XML.
我的问题是基于使用RSA SHA-256算法使用X.509证书签署单个XML元素的需要.我已经阅读了很多关于这个主题的.NET帖子,看来最初在CLR安全项目RSAPKCS1SHA256SignatureDescription.cs类中开发了一个解决方案.RSAPKCS1SHA256SignatureDescription当然已经被整合到.net运行时中,从.NET 4.5开始,现在可以在分布式二进制System.Deployment.dll下使用.我在.NET中尝试使用RSA SHA-256对特定的XML元素进行签名,但是还没有取得任何成功.
我正在尝试使用WSSE令牌签署符合Oasis ebms标准的SOAP消息.请注意,该课程的目的是为了满足Soap With Attachments(SwA)和签署个人附件.我的代码如下
我的代码如下:
using System;
using System.Collections.Generic;
using System.IO;
using System.IdentityModel.Tokens;
using System.Security;
using System.Security.Cryptography;
using System.Security.Cryptography.X509Certificates;
using System.Security.Cryptography.Xml;
using System.ServiceModel.Channels;
using System.ServiceModel.Security;
using System.Text;
using System.Xml;
using System.Xml.Linq;
using System.Xml.Serialization;
using System.Deployment.Internal.CodeSigning;
namespace TestCSharpX509CertificateRSSHA256
{
public class SignatureSupportUtility
{
private bool IsSignatureContentTransform
{
get
{
return true;
//get IsSignatureContentTransform
}
}
public SignatureSupportUtility()
{
Register();
}
private static void Register()
{
CryptoConfig.AddAlgorithm(typeof(RSAPKCS1SHA256SignatureDescription), "http://www.w3.org/2001/04/xmldsig-more#rsa-sha256");
}
private void Sign(Message message, string[] elementIdsToSign, …Run Code Online (Sandbox Code Playgroud) 我想sha256指纹使用openssl.我试过了,但你必须要sha1.我该怎么办?
我正在使用OpenSSL 1.0.1f.
命令
openssl md5 * >rand.dat
openssl genrsa -rand rand.dat -aes256 2048 > server.key
openssl req -new -key server.key -sha256 -config openssl.cfg > server.csr
openssl x509 -fingerprint -sha256 -in server.csr -req -signkey server.key -extensions v3_req -extfile openssl.cfg -out server.cer
Run Code Online (Sandbox Code Playgroud)
更改默认值如下:
[ CA_default ]
default_md = sha256 # Change
[ req ]
req_extensions = v3_req # Uncomment
Run Code Online (Sandbox Code Playgroud) 我正在研究一个用 C++ 编码的哈希函数,我想知道为什么主常量变量用十六进制值初始化。喜欢
unsigned long i= 0x428a2f98 ;
Run Code Online (Sandbox Code Playgroud)
如果是的话,这样做是否是为了性能,请解释一下,因为我认为它已在某个时候转换为整数值。
我想用OpenSSL创建一个自签名证书(root ca).签名算法需要是具有SHA-256哈希的ECDSA签名.在我的Mac OS X(优胜美地)上,我安装了OpenSSL版本0.9.8zc(从2014年10月15日起).当我openssl ciphers -v在命令行上调用时,似乎我当前的OpenSSL版本不支持SHA2(使用SHA-256等).
DHE-RSA-AES256-SHA SSLv3 Kx=DH Au=RSA Enc=AES(256) Mac=SHA1
DHE-DSS-AES256-SHA SSLv3 Kx=DH Au=DSS Enc=AES(256) Mac=SHA1
AES256-SHA SSLv3 Kx=RSA Au=RSA Enc=AES(256) Mac=SHA1
EDH-RSA-DES-CBC3-SHA SSLv3 Kx=DH Au=RSA Enc=3DES(168) Mac=SHA1
EDH-DSS-DES-CBC3-SHA SSLv3 Kx=DH Au=DSS Enc=3DES(168) Mac=SHA1
DES-CBC3-SHA SSLv3 Kx=RSA Au=RSA Enc=3DES(168) Mac=SHA1
DES-CBC3-MD5 SSLv2 Kx=RSA Au=RSA Enc=3DES(168) Mac=MD5
DHE-RSA-AES128-SHA SSLv3 Kx=DH Au=RSA Enc=AES(128) Mac=SHA1
DHE-DSS-AES128-SHA SSLv3 Kx=DH Au=DSS Enc=AES(128) Mac=SHA1
AES128-SHA SSLv3 Kx=RSA Au=RSA Enc=AES(128) Mac=SHA1
DHE-RSA-SEED-SHA SSLv3 Kx=DH Au=RSA Enc=SEED(128) Mac=SHA1
DHE-DSS-SEED-SHA SSLv3 Kx=DH Au=DSS Enc=SEED(128) Mac=SHA1 …Run Code Online (Sandbox Code Playgroud) 我正在尝试完成Top Code Go学习挑战作为学习去的工具.我目前正在研究他们的Simple API Web Server问题.部分问题要求您加密密码字符串,如"'{SHA256}'+ Base64编码SHA256用户密码摘要"
我使用以下代码执行此操作,但结果与提供的测试用例不匹配.
import (
"encoding/base64"
"crypto/sha256"
)
func encrtyptPasswords(password string) string {
h := sha256.New()
return "{SHA256}" +
string(base64.StdEncoding.EncodeToString(h.Sum([]byte(password))))
}
Run Code Online (Sandbox Code Playgroud)
对于abcd1234的输入,它应加密到:{SHA256} 6c7nGrky_ehjM40Ivk3p3-OeoEm9r7NCzmWexUULaa4 =
但我得到{SHA256} YWJjZDEyMzTjsMRCmPwcFJr79MiZb7kkJ65B5GSbk0yklZkbeFK4VQ ==.我怀疑我使用加密库是错误的,但我不确定我应该使用什么,因为这似乎是SHA256的标准库加密方法.
我目前正在尝试实现我们正在使用的库的身份验证部分,但我偶然发现了一个奇怪的数据签名问题,NodeJS 中的 crypto.createHmac 的输出大约是 hash_hmac 的一半在 PHP 中,这是 PHP 和 NodeJS 之间唯一不同的数据部分(我们需要在这里使用 NodeJS)
用于在 NodeJS 中创建签名的确切代码是,
authorization["oauth_signature"] = crypto.createHmac('SHA256', process.env.SECRET).update(toSign).digest('base64');
Run Code Online (Sandbox Code Playgroud)
对于 PHP,它是
$authorization["oauth_signature"] = base64_encode(hash_hmac("SHA256", $signatureString . $signingKey, $secret));
Run Code Online (Sandbox Code Playgroud)
但是 NodeJS 版本的输出是
7LkQP+qKR1gSdPq/AgH/3No3ps7EtZXnqwjivMixvM8=
Run Code Online (Sandbox Code Playgroud)
对于 PHP,它是
NmQ0MWIzYmJiMjI2YzFlMDhiYzY3NzVmMWY0MzEwNDlhNDU3NDI0ZGJlMzU3NjJhYmMwYjgwYzZjMDE4NDM4OA==
Run Code Online (Sandbox Code Playgroud)
其中有超过两倍的数据
我是否必须为 NodeJS 版本使用不同的库,而不是在一个库中构建?顺便说一句,我们在 Microsoft Azure 上托管我们的 NodeJS 后端,不确定这是否相关,但至少值得一提。
编辑:
我发现了这个问题,PHP中的hash_hmac自动将其数据导出为十六进制数据,crypto.createHmac将其数据导出为我直接转换为base64的原始二进制数据,我需要做的就是首先将数据导出为十六进制然后转换到base64。
这是一个Java代码,可为Java中的字符串生成sha256哈希。
public static void main(){
String data = "hello world";
// Generate the Sha256 hash using Apache Common Codec library
String hash = DigestUtils.sha256Hex( data);
System.out.println("Apache : Sha256hash: "+ hash);
// Generate Sha 256 hash by using guava library
final String hashed = Hashing.sha256()
.hashString(data, StandardCharsets.UTF_8)
.toString();
System.out.println("Guava : Sha256hash: "+ hashed);
}
Run Code Online (Sandbox Code Playgroud)
当我运行程序时,我得到以下值。两个哈希完全相同。
Apache : Sha256hash: b94d27b9934d3e08a52e52d7da7dabfac484efe37a5380ee9088f7ace2efcde9
Guava : Sha256hash: b94d27b9934d3e08a52e52d7da7dabfac484efe37a5380ee9088f7ace2efcde9
Run Code Online (Sandbox Code Playgroud)
现在,我从命令行为字符串“ hello world”生成了Sha256哈希。
命令行util sha2
echo "hello world" | sha2 -256
SHA-256 ((null)) = a948904f2f0f479b8f8197694b30184b0d2ed1c1cd2a1ec0fb85d299a192a447
Run Code Online (Sandbox Code Playgroud)
OpenSSL实用程序
echo 'hello …Run Code Online (Sandbox Code Playgroud)