HMACSHA512
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相关推荐
- Java实现哈希加密(HmacSHA1、HmacMD5、HmacSHA256、HmacSHA512)
示例代码 import javax.crypto.Mac; import javax.crypto.SecretKey; import javax.crypto.spec.SecretKeySpec; ...
- .NET Core 常用加密和Hash工具NETCore.Encrypt
前言 在日常开发过程中,不可避免的涉及到数据加密解密(Hash)操作,所以就有想法开发通用工具,NETCore.Encrypt就诞生了.目前NETCore.Encrypt只支持.NET Core ,工 ...
- 基于Hash的消息认证码HMAC简介及在OpenSSL中使用举例
HMAC(Hash-based Message Authentication Code):基于Hash的消息认证码,是一种通过特别计算方式之后产生的消息认证码(MAC),使用密码散列函数,同时结合一个 ...
- 【安全加密技术】 对称加密
转载请注明出处:http://blog.csdn.net/sk719887916/article/details/46822663 上篇了解了<非对称加密>后 今天我来继续了解下加密技术中 ...
- Centos DNS服务(二)-bind主从配置与基于TSIG加密的动态更新
DNS的主从配置 DNS从服务器也叫辅服DNS服务器,如果网络上某个节点只有一台DNS服务器的话,首先服务器的抗压能力是有限的,当压力达到一定的程度,服务器就可能会宕机罢工, 其次如果这台服务器出现了 ...
- cryptojs aes加密每次结果不同_Javascript加密算法标准库,支持Nodejs+浏览器——crypto-js...
介绍 crypto-js是一个前端Javascript标准加密算法库,CryptoJS (crypto.js) 为 JavaScript 提供了各种各样的加密算法.有时候项目涉及到的敏感数据比较多,为 ...
- 数字货币HD钱包 BIP32、BIP44、BIP39 简介
数字钱包概念 钱包用来存钱的,在区块链中,我们的数字资产都会对应到一个账户地址上, 只有拥有账户的钥匙(私钥)才可以对资产进行消费(用私钥对消费交易签名). 私钥和地址的关系如下: (图来自精通比特币 ...
- 数字货币 分层确定性钱包(HD Wallets)
HD Wallets的全称是Hierachical Deterministic Wallets, 对应中文是 分层确定性钱包. 分层确定性的概念在BIP32提案提出. 根据比特币核心开发者 Grego ...
- [转]Java加密算法
如基本的单向加密算法: BASE64 严格地说,属于编码格式,而非加密算法 MD5(Message Digest algorithm 5,信息摘要算法) SHA(Secure Hash Algorit ...
最新文章
- Windows窗体的所有菜单
- python基础练习(九)
- 什么场景应该用 MongoDB ?
- VTK:可视化之HideAllActors
- [转] JavaScript中的属性:如何遍历属性
- 本地开发的 SAP UI5 应用,部署到 ABAP 服务器执行出错的问题分析
- 嵌入式开发笔记(二)嵌入式系统启动过程 (S5pv210)
- 反转链表python
- 46 - 算法 - Leetcode-155-最小栈
- 如何用 160 行代码,实现动态炫酷的可视化图表?
- vue实现input输入框控制最多输入一位小数
- python把excel填充到网页_Python获取某网页数据并写入excel
- RubyOnRails开发知识链接汇总
- 已知高维高斯联合概率分布求边缘概率分布以及条件概率分布
- 坚果pro2完美降回6.0.3卡刷包 完美恢复方法
- SQL数据库语句大全
- 计算机网络设计大赛总结,大学生海报设计大赛总结
- 一个程序员的成长之路(持续更新)
- LeetCode刷题(158)~从尾到头打印链表【递归|辅助栈】
- c语言公开课教案,9、祝福优质课一等奖教案