微信公众号

Sign

import java.util.UUID;
import java.util.Map;
import java.util.HashMap;
import java.util.Formatter;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.io.UnsupportedEncodingException; class Sign {
public static void main(String[] args) {
String jsapi_ticket = "jsapi_ticket"; // 注意 URL 一定要动态获取,不能 hardcode
String url = "http://example.com";
Map<String, String> ret = sign(jsapi_ticket, url);
for (Map.Entry entry : ret.entrySet()) {
System.out.println(entry.getKey() + ", " + entry.getValue());
}
}; public static Map<String, String> sign(String jsapi_ticket, String url) {
Map<String, String> ret = new HashMap<String, String>();
String nonce_str = create_nonce_str();
String timestamp = create_timestamp();
String string1;
String signature = ""; //注意这里参数名必须全部小写,且必须有序
string1 = "jsapi_ticket=" + jsapi_ticket +
"&noncestr=" + nonce_str +
"&timestamp=" + timestamp +
"&url=" + url;
System.out.println(string1); try
{
MessageDigest crypt = MessageDigest.getInstance("SHA-1");
crypt.reset();
crypt.update(string1.getBytes("UTF-8"));
signature = byteToHex(crypt.digest());
}
catch (NoSuchAlgorithmException e)
{
e.printStackTrace();
}
catch (UnsupportedEncodingException e)
{
e.printStackTrace();
} ret.put("url", url);
ret.put("jsapi_ticket", jsapi_ticket);
ret.put("nonceStr", nonce_str);
ret.put("timestamp", timestamp);
ret.put("signature", signature); return ret;
} private static String byteToHex(final byte[] hash) {
Formatter formatter = new Formatter();
for (byte b : hash)
{
formatter.format("%02x", b);
}
String result = formatter.toString();
formatter.close();
return result;
} private static String create_nonce_str() {
return UUID.randomUUID().toString();
} private static String create_timestamp() {
return Long.toString(System.currentTimeMillis() / 1000);
}
}

最新文章

  1. JavaScript随笔7
  2. 高效 Java Web 开发框架 JessMA v3.5.1
  3. Java内存模型深度解析:基础部分--转
  4. VA01复制单据,更新定价日期和价格
  5. CentOS 7下Wireshark捕获USB数据包
  6. callsession新功能版
  7. DFS与BFS
  8. 封装js千分位加逗号和删除逗号
  9. APICloud界面间跳转
  10. Java 并发 – 线程安全?
  11. Use Select To Generate Any Insert/Delete/Update Statement
  12. python基础的输入字符串的格式化
  13. 微信小程序:wx.request之post请求后端无法获取数据的问题
  14. solr与Elasticsearch对比
  15. Java多线程之原子性 volatile、atomicInteger测试
  16. 开始写博客,学习Linq(4)
  17. AppStore企业账号打包发布APP流程详解
  18. new~mac os 给终端命令写alias(及其他常用命令)及软连接
  19. Python资料收藏(杂乱版)
  20. UML入门 之 交互图 -- 时序图 协作图详解

热门文章

  1. shit layui &amp; select &amp; re-render &amp; bug
  2. POJ 1679 判最小生成树的不唯一性 或 利用次小生成树求解
  3. [codevs4655] 序列终结者(Splay)
  4. [K/3Cloud] 使用操作还是服务
  5. [NOIP2005] 普及组 循环
  6. Ubuntu12.04之vi的问题
  7. SVG :可缩放矢量图形(Scalable Vector Graphics)。
  8. tplink wr886n v5.0 ttl 接线方法
  9. 集成学习(ensemble method)--基于树模型
  10. 如何快速掌握plc或工控机与其他设备的modbus通讯协议?包括格式与实际过程 RT,本人从事工控行业多年,对于PLC与触摸屏也算比较熟悉,唯独对这个通讯协议比较难理解,请教高人指导,从什么地方开始下手,或者是说如何正确理解报文格式或正确写入