HMACSHA 512

在Java .NET Objective – C

Java

private final static String algorithm = "HMACSHA512";

public static void main(String[] args) {

String result = hmacSHA512("3e4f2550-0818-4665-9bfb-edbe9b15f586");

System.out.println(result);

}

private static String hmacSHA512(String key) {

String result = "";

try {

Calendar c = Calendar.getInstance(TimeZone.getTimeZone("UTC"));

long unixTime = c.getTimeInMillis() / 1000;

String data = String.valueOf(unixTime);

final byte[] bytesData = data.getBytes("UTF-8");

final byte[] bytesKey = key.getBytes();

final SecretKey secretKey = new SecretKeySpec(bytesKey, algorithm);

Mac mac = Mac.getInstance(algorithm);

mac.init(secretKey);

mac.update(bytesData);

final byte[] macData = mac.doFinal();

final long l = bytesToLong(macData);

BigDecimal bDecimal = readUnsignedLong(l);

BigDecimal pBigDecimal = new BigDecimal(Math.pow(10, 15));

BigDecimal token = bDecimal.remainder(pBigDecimal);

result = String.valueOf(token);

return resultCheck(result);

} catch (Exception e) {

System.out.println(e.getMessage());

}

return result;

}

private static String resultCheck(String token) {

while (token.length() < 15) {

token = "0" + token;

}

return token;

}

public static long bytesToLong(byte[] b) {

long s = 0;

long s0 = b[0] & 0xff;

long s1 = b[1] & 0xff;

long s2 = b[2] & 0xff;

long s3 = b[3] & 0xff;

long s4 = b[4] & 0xff;

long s5 = b[5] & 0xff;

long s6 = b[6] & 0xff;

long s7 = b[7] & 0xff;

s1 <<= 8;

s2 <<= 16;

s3 <<= 24;

s4 <<= 8 * 4;

s5 <<= 8 * 5;

s6 <<= 8 * 6;

s7 <<= 8 * 7;

s = s0 | s1 | s2 | s3 | s4 | s5 | s6 | s7;

return s;

}

public static final BigDecimal readUnsignedLong(long value) throws IOException {

if (value >= 0)

return new BigDecimal(value);

long lowValue = value & 0x7fffffffffffffffL;

return BigDecimal.valueOf(lowValue).add(BigDecimal.valueOf(Long.MAX_VALUE)).add(BigDecimal.valueOf(1));

}

.NET

static void Main(string[] args)

{

var dateTime = new DateTime(2018, 6, 1, 15, 22, 34, DateTimeKind.Utc);

Console.WriteLine(Generate("3e4f2550-0818-4665-9bfb-edbe9b15f586", dateTime));

Console.ReadKey();

}

public static string Generate(string secretKey, DateTime date)

{

date = date.Kind == DateTimeKind.Utc ? date : date.ToUniversalTime();

var unixTime = new DateTime(1970, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc);

var counter = (long)date.Subtract(unixTime).TotalSeconds;

byte[] keyBytes = Encoding.ASCII.GetBytes(secretKey);

ulong hash = 0;

using (HMACSHA512 hmac = new HMACSHA512(keyBytes))

{

byte[] counterBytes = Encoding.UTF8.GetBytes(counter.ToString());

byte[] hashBytes = hmac.ComputeHash(counterBytes);

hash = BitConverter.ToUInt64(hashBytes, 0);

}

ulong token = hash % (ulong)Math.Pow(10, 15);

return token.ToString("000000000000000");

}

Objective – C

- (NSString *)generate:(NSString *)secretKey {

NSString *counter = @"1527866554";

NSData *counterBytes = [counter dataUsingEncoding:NSUTF8StringEncoding];

NSData *keyBytes = [secretKey dataUsingEncoding:NSUTF8StringEncoding];

NSMutableData *macOut = [NSMutableData dataWithLength:CC_SHA512_DIGEST_LENGTH];

CCHmac( kCCHmacAlgSHA512,

keyBytes.bytes,

keyBytes.length,

counterBytes.bytes,

counterBytes.length,

macOut.mutableBytes);

unsigned long long hash = 0;

[macOut getBytes:&hash length:sizeof(unsigned long)];

unsigned long long token = hash % (unsigned long)pow(10, 15);

NSString *strToken = [NSString stringWithFormat:@"%015lld", token];

NSLog(@"secret key = %@, counter = %@, payment code = %@", secretKey, counter, strToken);

return strToken;

}

转载于:https://www.cnblogs.com/BlueEye/p/8760821.html

HMACSHA512相关推荐

  1. Java实现哈希加密(HmacSHA1、HmacMD5、HmacSHA256、HmacSHA512)

    示例代码 import javax.crypto.Mac; import javax.crypto.SecretKey; import javax.crypto.spec.SecretKeySpec; ...

  2. .NET Core 常用加密和Hash工具NETCore.Encrypt

    前言 在日常开发过程中,不可避免的涉及到数据加密解密(Hash)操作,所以就有想法开发通用工具,NETCore.Encrypt就诞生了.目前NETCore.Encrypt只支持.NET Core ,工 ...

  3. 基于Hash的消息认证码HMAC简介及在OpenSSL中使用举例

    HMAC(Hash-based Message Authentication Code):基于Hash的消息认证码,是一种通过特别计算方式之后产生的消息认证码(MAC),使用密码散列函数,同时结合一个 ...

  4. 【安全加密技术】 对称加密

    转载请注明出处:http://blog.csdn.net/sk719887916/article/details/46822663 上篇了解了<非对称加密>后 今天我来继续了解下加密技术中 ...

  5. Centos DNS服务(二)-bind主从配置与基于TSIG加密的动态更新

    DNS的主从配置 DNS从服务器也叫辅服DNS服务器,如果网络上某个节点只有一台DNS服务器的话,首先服务器的抗压能力是有限的,当压力达到一定的程度,服务器就可能会宕机罢工, 其次如果这台服务器出现了 ...

  6. cryptojs aes加密每次结果不同_Javascript加密算法标准库,支持Nodejs+浏览器——crypto-js...

    介绍 crypto-js是一个前端Javascript标准加密算法库,CryptoJS (crypto.js) 为 JavaScript 提供了各种各样的加密算法.有时候项目涉及到的敏感数据比较多,为 ...

  7. 数字货币HD钱包 BIP32、BIP44、BIP39 简介

    数字钱包概念 钱包用来存钱的,在区块链中,我们的数字资产都会对应到一个账户地址上, 只有拥有账户的钥匙(私钥)才可以对资产进行消费(用私钥对消费交易签名). 私钥和地址的关系如下: (图来自精通比特币 ...

  8. 数字货币 分层确定性钱包(HD Wallets)

    HD Wallets的全称是Hierachical Deterministic Wallets, 对应中文是 分层确定性钱包. 分层确定性的概念在BIP32提案提出. 根据比特币核心开发者 Grego ...

  9. [转]Java加密算法

    如基本的单向加密算法: BASE64 严格地说,属于编码格式,而非加密算法 MD5(Message Digest algorithm 5,信息摘要算法) SHA(Secure Hash Algorit ...

最新文章

  1. Windows窗体的所有菜单
  2. python基础练习(九)
  3. 什么场景应该用 MongoDB ?
  4. VTK:可视化之HideAllActors
  5. [转] JavaScript中的属性:如何遍历属性
  6. 本地开发的 SAP UI5 应用,部署到 ABAP 服务器执行出错的问题分析
  7. 嵌入式开发笔记(二)嵌入式系统启动过程 (S5pv210)
  8. 反转链表python
  9. 46 - 算法 - Leetcode-155-最小栈
  10. 如何用 160 行代码,实现动态炫酷的可视化图表?
  11. vue实现input输入框控制最多输入一位小数
  12. python把excel填充到网页_Python获取某网页数据并写入excel
  13. RubyOnRails开发知识链接汇总
  14. 已知高维高斯联合概率分布求边缘概率分布以及条件概率分布
  15. 坚果pro2完美降回6.0.3卡刷包 完美恢复方法
  16. SQL数据库语句大全
  17. 计算机网络设计大赛总结,大学生海报设计大赛总结
  18. 一个程序员的成长之路(持续更新)
  19. LeetCode刷题(158)~从尾到头打印链表【递归|辅助栈】
  20. c语言公开课教案,9、祝福优质课一等奖教案

热门文章

  1. 图片作为背景的相关方法
  2. GraphSAGE NIPS 2017 代码分析(Tensorflow版)
  3. IDEA中使用Docker插件构建镜像并推送至私服Harbor
  4. 何恺明一作论文 MAE 已有人复现!PyTorch 版!
  5. 实录丨戴琼海:深度学习遭遇瓶颈,全脑观测启发下一代AI算法
  6. 【51CTO学院】双11抽奖规则
  7. 网络编程基础知识概括帮助你了解架框组成客户端服务端架构
  8. eclipse git 取远程代码_【JAVA】Eclipse中使用git进行pull远程代码
  9. 20121223-命令与征服全面变更
  10. 一个非常好的资源网站