我正在创建一个存储文档的应用程序,并根据一些内容(包括时间戳)的SHA1摘要为每个文档提供一个UID.摘要有很多字符,我想允许用户使用完整摘要的前x个字符来识别文档.如果文档的数量可能在10K到100K左右,x的价值是多少?
我想兴奋地构建一个函数,它生成一个带有密钥的HMAC,就像这个站点提供的:
http://www.freeformatter.com/hmac-generator.html
java 8 lib只提供MessageDigest和KeyGenerator,它们最多只支持SH256.
谷歌也没有给我任何结果来生成HMAC.
有人知道实施吗?
我有这个代码生成一个普通的SH256,但我想这对我没什么帮助:
public static String get_SHA_512_SecurePassword(String passwordToHash) throws Exception {
String generatedPassword = null;
MessageDigest md = MessageDigest.getInstance("SHA-512");
byte[] bytes = md.digest(passwordToHash.getBytes("UTF-8"));
StringBuilder sb = new StringBuilder();
for (int i = 0; i < bytes.length; i++) {
sb.append(Integer.toString((bytes[i] & 0xff) + 0x100, 16).substring(1));
}
generatedPassword = sb.toString();
System.out.println(generatedPassword);
return generatedPassword;
}
Run Code Online (Sandbox Code Playgroud) 我很难完全理解加密的工作原理和编码方式,尤其是python.我只是试图了解基础并以最简单的形式创建代码.
我将在两个不同的站点之间传递userID,但显然我需要使用私钥加密,因此Website2知道它来自Website1.这似乎是我的代码:http: //docs.python.org/library/hashlib.html#module-hashlib,但它没有很好的例子(或者我可能在错误的位置).
我遇到的问题是完全理解如何编码和解码.
那么让我们说每个网站都知道的共享私钥是:
shared_private_key = "ABCDEF"
Run Code Online (Sandbox Code Playgroud)
我希望Website1将以下用户ID传递给Website2:
userID = "123456"
Run Code Online (Sandbox Code Playgroud)
Website1如何使用私钥加密我的userID,加密可以通过HTTP头发送,然后让Website2解密并能够使用共享私钥读取userID?
我为提出这样一个基本问题而道歉,但我没有意识到应该怎么做.谢谢.
在android中有没有创建Hmac256字符串的功能?我使用php作为我的后端为我的android应用程序,在php中我们可以使用php函数创建hmac256字符串hash_hmac()[ 参考 ]在Android中是否有这样的功能
请帮我.
基于SHA-1的HMAC的安全性是否受到SHA-1冲突攻击的影响?
我正在考虑使用AES256 CBC + HMAC SHA-256作为消息的构建块,以确保机密性和身份验证.
特别要考虑这种情况:
现在,对于Bob希望发送Alice的每个数据包,他执行以下操作:
Alice还计算了K(e)和K(s),并且在从Bob接收数据时遵循以下过程:
该协议是否确保Alice仅解密来自Bob的消息,假设除了Bob之外没有人可以读取Alice使用他的公钥加密的加密消息?
即以这种方式构建的消息是否确保机密性和身份验证?
注意:如果协议要求Bob发送多条消息,则需要稍加修改此方案以避免重放攻击.
PS我知道AES-GCM/CCM,但这种方案适用于大多数加密包中的基本AES,SHA和HMAC算法.此解决方案也可能较慢,但这也超出了问题的范围.
我需要使用HMAC SHA256生成哈希.我在Java中使用以下代码.我需要Objective-C中的等效代码.
javax.crypto.Mac mac = javax.crypto.Mac.getInstance(type);
javax.crypto.spec.SecretKeySpec secret = new javax.crypto.spec.SecretKeySpec(key.getBytes(), type);
mac.init(secret);
byte[] digest = mac.doFinal(value.getBytes());
StringBuilder sb = new StringBuilder(digest.length * 2);
String s="";
for (byte b: digest) {
s = Integer.toHexString(b);
if (s.length() == 1) {
sb.append('0');
}
sb.append(s);
}
return sb.toString();
Run Code Online (Sandbox Code Playgroud)
键= YARJSuwP5Oo6/r47LczzWjUx/T8ioAJpUK2YfdI/ZshlTUP8q4ujEVjC0seEUAAtS6YEE1Veghz+IDbNQb+2KQ==
价值=
id=456|time=19:10|nonce=8
输出=
4effffffd8ffffffce7cffffffc4ffffffc71b2f72ffffffdc21ffffffa1ffffffe0ffffffe62d32550b0771296bffffff9c1159ffffffdeffffff8675ffffff9928654c
Run Code Online (Sandbox Code Playgroud)
我有这个Objective-C功能:
//Hash method Definition
- (NSString *)getHashEncription:(NSString *)key andData:(NSString *)data{
NSLog(@"Secret Key %@ And Data %@", key, data);
const char *cKey = [key cStringUsingEncoding:NSASCIIStringEncoding];
const char *cData = [data …Run Code Online (Sandbox Code Playgroud) 我一直在尝试使用PowerShell中的HMAC-SHA1加密类似Amazon S3的授权密钥,代码如下:
$str="PUT\n\napplication/x-zip-compressed\nThu, 09 Feb 2017 08:59:43 GMT\n/test-bucket/test-key"
$secret="c334da95a6734ff4a04abd99efca450f"
$sha = [System.Security.Cryptography.KeyedHashAlgorithm]::Create("HMACSHA1")
$sha.Key = [System.Text.Encoding]::UTF8.Getbytes($secret)
$sign = [Convert]::Tobase64String($sha.ComputeHash([System.Text.Encoding]::UTF8.Getbytes(${str})))
echo $sign
Run Code Online (Sandbox Code Playgroud)
此代码输出NcJQ1MapHbyRwC2FzvABYyte5uY=,根据我们服务提供商的建议不正确.
然后我尝试在C#代码中使用完全相同的类:
static void Main(string[] args)
{
var str = "PUT\n\napplication/x-zip-compressed\nThu, 09 Feb 2017 08:59:43 GMT\n/test-bucket/test-key";
var secret = "c334da95a6734ff4a04abd99efca450f";
var sha = System.Security.Cryptography.KeyedHashAlgorithm.Create("HMACSHA1");
sha.Key = System.Text.Encoding.UTF8.GetBytes(secret);
Console.WriteLine(Convert.ToBase64String(sha.ComputeHash(System.Text.Encoding.UTF8.GetBytes(str)))); //1S+/P9zgcCCyjwUK1bPKaKeya7A=
Console.Read();
}
Run Code Online (Sandbox Code Playgroud)
奇怪的是,这一次,结果是正确的: 1S+/P9zgcCCyjwUK1bPKaKeya7A=
我也试过Python,它证明了C#代码.为什么PowerShell遇到错误的答案,即使输入,类和方法与C#代码中调用的那些完全相同?
尝试为 3Commas 生成 HMAC SHA256 签名,我使用官方示例中的相同参数,它应该生成:“30f678a157230290e00475cfffccbc92ae3659d94c145a2c0e9d0fa28f41c11a”
但我生成:“17a656c7df48fa2db615bfc719627fc94e59265e6af18cc7714694ea5b58a11a”
这是我尝试过的:
secretkey = 'NhqPtmdSJYdKjVHjA7PZj4Mge3R5YNiP1e3UZjInClVN65XAbvqqM6A7H5fATj0j'
totalParams = '/public/api/ver1/accounts/new?type=binance&name=binance_account&api_key=XXXXXX&secret=YYYYYY'
print 'signature = '+hashlib.sha256((secretkey+totalParams).encode('ASCII')).hexdigest()
Run Code Online (Sandbox Code Playgroud)
谁能帮我吗?
我正在尝试使用 MacOS 上的命令行实用程序创建一个 JSON Web 令牌 (JWT),并在签名部分遇到了障碍。
这个要点给了我很大的启发: https //gist.github.com/indrayam/dd47bf6eef849a57c07016c0036f5207
对于我的 JWT,我有标题:
{"alg":"HS256","typ":"JWT"}
Run Code Online (Sandbox Code Playgroud)
有效载荷:
{"email":"jordan@example.com"}
Run Code Online (Sandbox Code Playgroud)
我的 hmac 秘诀是:
bigsecretisveryhardtoguessbysneakypeopleright
Run Code Online (Sandbox Code Playgroud)
或者在 base64 中:
Ymlnc2VjcmV0aXN2ZXJ5aGFyZHRvZ3Vlc3NieXNuZWFreXBlb3BsZXJpZ2h0Cg==
Run Code Online (Sandbox Code Playgroud)
我发现如果我使用 base64 版本的密钥将所有这些输入到站点中,它会生成以下 JWT,该 JWT 成功地验证了我正在测试的站点:
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJlbWFpbCI6ImpvcmRhbkBleGFtcGxlLmNvbSJ9.C3MVjfmnul8dLNIgiv6Dt3jSefD07Y0QtDrOZ5oYSXo
Run Code Online (Sandbox Code Playgroud)
在 bash 我试过这个:
jwt_header=$(echo -n '{"alg":"HS256","typ":"JWT"}' | base64 | sed s/\+/-/g | sed 's/\//_/g' | sed -E s/=+$//)
payload=$(echo -n '{"email":"jordan@example.com"}' | base64 | sed s/\+/-/g |sed 's/\//_/g' | sed -E s/=+$//)
hmac_signature=$(echo -n "${jwt_header}.${payload}" | openssl dgst -sha256 -hmac "${key}" -binary | openssl base64 -e …Run Code Online (Sandbox Code Playgroud) hmac ×10
sha1 ×4
cryptography ×3
java ×2
python ×2
aes ×1
algorithm ×1
android ×1
bash ×1
c# ×1
cryptographic-hash-function ×1
hash ×1
hashcode ×1
hashlib ×1
hmacsha1 ×1
jwt ×1
linux ×1
objective-c ×1
openssl ×1
powershell ×1
probability ×1
python-3.x ×1
security ×1