标签: hmac

您可以截断多少SHA1哈希并合理确定拥有唯一ID?

我正在创建一个存储文档的应用程序,并根据一些内容(包括时间戳)的SHA1摘要为每个文档提供一个UID.摘要有很多字符,我想允许用户使用完整摘要的前x个字符来识别文档.如果文档的数量可能在10K到100K左右,x的价值是多少?

algorithm sha1 probability hmac

17
推荐指数
1
解决办法
6480
查看次数

在java中使用密钥计算HMAC-SHA512

我想兴奋地构建一个函数,它生成一个带有密钥的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)

java hmac

17
推荐指数
3
解决办法
3万
查看次数

python加密的基础知识w/hashlib sha1

我很难完全理解加密的工作原理和编码方式,尤其是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?

我为提出这样一个基本问题而道歉,但我没有意识到应该怎么做.谢谢.

python cryptography sha1 hmac hashlib

15
推荐指数
2
解决办法
3万
查看次数

在android中有没有创建Hmac256字符串的功能?

在android中有没有创建Hmac256字符串的功能?我使用php作为我的后端为我的android应用程序,在php中我们可以使用php函数创建hmac256字符串hash_hmac()[ 参考 ]在Android中是否有这样的功能

请帮我.

android hmac hmacsha1

15
推荐指数
2
解决办法
7315
查看次数

13
推荐指数
1
解决办法
6599
查看次数

AES256 CBC + HMAC SHA256确保机密*和*身份验证?

我正在考虑使用AES256 CBC + HMAC SHA-256作为消息的构建块,以确保机密性和身份验证.

特别要考虑这种情况:

  • Alice拥有属于Bob的公钥(密钥交换和算法超出了该问题的范围).Alice有一个识别密钥K,也是与Bob共享的,她可以用来识别自己.只有Alice和Bob知道密钥K.
  • Alice使用Bob的公钥加密(nonce || K).
  • 鲍勃解密数据包,现在有K和nonce.
  • Bob使用SHA-256和SHA256(K || nonce)来产生256位的K(e).
  • Bob使用SHA256和SHA256(K || nonce + 1)来产生256位的K(s).

现在,对于Bob希望发送Alice的每个数据包,他执行以下操作:

  • 创建一个新的随机128位IV
  • 使用IV和K(e)作为密钥加密消息.
  • 创建一个SHA-256 HMAC,其中K(s)作为密钥,(IV || Encrypted message)作为数据.
  • 最后发送(IV || HMAC || Ciphertext)给Alice

Alice还计算了K(e)和K(s),并且在从Bob接收数据时遵循以下过程:

  • 将邮件拆分为IV,密文和HMAC.
  • 使用K(s),IV和密文计算HMAC.
  • 将HMAC与发送的HMAC进行比较.如果匹配,则Alice认为此消息被认证为Bob发送的消息,否则将被丢弃.
  • Alice使用K(e)解密消息

该协议是否确保Alice仅解密来自Bob的消息,假设除了Bob之外没有人可以读取Alice使用他的公钥加密的加密消息?

即以这种方式构建的消息是否确保机密性和身份验证?

注意:如果协议要求Bob发送多条消息,则需要稍加修改此方案以避免重放攻击.

PS我知道AES-GCM/CCM,但这种方案适用于大多数加密包中的基本AES,SHA和HMAC算法.此解决方案也可能较慢,但这也超出了问题的范围.

security cryptography aes hmac

13
推荐指数
1
解决办法
1万
查看次数

需要像Java一样在Objective C中生成HMAC SHA256哈希

我需要使用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)

java hash objective-c hmac

13
推荐指数
1
解决办法
2万
查看次数

为什么在C#和PowerShell中使用完全相同的代码加密HMAC-SHA1会显示不同的结果?

我一直在尝试使用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#代码中调用的那些完全相同?

c# powershell sha1 hmac

13
推荐指数
1
解决办法
1722
查看次数

生成 HMAC SHA256 签名 Python

尝试为 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)

谁能帮我吗?

python hmac python-3.x

13
推荐指数
1
解决办法
1万
查看次数

如何使用 OpenSSL shell 命令创建 Json Web Token (JWT)?

我正在尝试使用 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)

我使用以下网站进行验证:https : //jwt.io/

我发现如果我使用 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)

linux bash openssl hmac jwt

13
推荐指数
1
解决办法
7057
查看次数