该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

全局定义

private static final String ENCODE_TYPE = "UTF-8";

private static final String ALGORITHM = "HmacSHA1";

private static final String HTTP_METHOD = "GET";

private static final String SEPARATOR = "&";

private static final String EQUAL = "=";

准备请求参数

Map parameterMap = new HashMap();

// 请求公共参数

parameterMap.put("Action", "SearchTemplate");

parameterMap.put("Version", "2014-06-18");

parameterMap.put("AccessKeyId", "testId"); //此处请替换成您自己的AccessKeyId

parameterMap.put("Timestamp", "2015-05-14T09:03:45Z");//此处将时间戳固定只是测试需要,这样此示例中生成的签名值就不会变,方便您对比验证,可变时间戳的生成需要用下边这句替换

//parameterMap.put("Timestamp", formatIso8601Date(new Date()));

parameterMap.put("SignatureMethod", "HMAC-SHA1");

parameterMap.put("SignatureVersion", "1.0");

parameterMap.put("SignatureNonce", "4902260a-516a-4b6a-a455-45b653cf6150"); //此处将唯一随机数固定只是测试需要,这样此示例中生成的签名值就不会变,方便您对比验证,可变唯一随机数的生成需要用下边这句替换

//parameterMap.put("SignatureNonce", UUID.randomUUID().toString());

parameterMap.put("Format", "XML"); //另外支持JSON格式

使用请求参数构造规范化的请求字符串(Canonicalized Query String)

private static String percentEncode(String value) throws UnsupportedEncodingException {

return URLEncoder.encode(value, ENCODE_TYPE).replace("+", "%20").replace("*", "%2A").replace("%7E", "~");

}

private static String buildCanonicalizedQueryString(Map parameterMap) throws UnsupportedEncodingException {

// 对参数进行排序

List sortedKeys = new ArrayList(parameterMap.keySet());

Collections.sort(sortedKeys);

StringBuilder temp = new StringBuilder();

for (String key : sortedKeys) {

// 此处需要对key和value进行编码

String value = parameterMap.get(key);

temp.append(SEPARATOR).append(percentEncode(key)).append(EQUAL).append(percentEncode(value));

}

return temp.toString().substring(1);

}

计算签名(包括HMAC签名以及Base64编码)

private static String buildStringToSign(String canonicalizedQueryString) throws UnsupportedEncodingException {

// 生成stringToSign字符

StringBuilder temp = new StringBuilder();

temp.append(HTTP_METHOD).append(SEPARATOR);

temp.append(percentEncode("/")).append(SEPARATOR);

// 此处需要对canonicalizedQueryString进行编码

temp.append(percentEncode(canonicalizedQueryString));

return temp.toString();

}

private static String buildSignature(String keySecret, String stringToSign) throws UnsupportedEncodingException, InvalidKeyException, NoSuchAlgorithmException {

SecretKey key = new SecretKeySpec((keySecret + SEPARATOR).getBytes(ENCODE_TYPE), SignatureMethod.HMAC_SHA1);

Mac mac = Mac.getInstance(ALGORITHM);

mac.init(key);

byte[] hashBytes = mac.doFinal(stringToSign.toString().getBytes(ENCODE_TYPE));

byte[] base64Bytes = new Base64().encode(hashBytes);

String base64UTF8String = new String(base64Bytes, "utf-8");

return URLEncoder.encode(base64UTF8String, ENCODE_TYPE);

}

Java库转oc_急急急!各位大神:一段JAVA代码转成OC代码。相关推荐

  1. Java好还是网优好_大神告诉你|Java好还是Python好?

    在进入主题之前,小智先分享几条大神的人生警句.醒世明言: 初学者才争论语言,我们只看心情. 还有: 选择入门语言最重要的是 "三观"相似 "臭味"相投 以及大家 ...

  2. java计算器 运算符优先级_跪求大神帮忙,怎样在java 计算器中实现,四则运算优先级;...

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 代码如下,跪求大神补充 import java.awt.*; import java.awt.event.*; import java.awt.image ...

  3. 用java编写圆锥_求java大神帮忙 求大神帮助!Java

    导航:网站首页 > 求java大神帮忙 求大神帮助!Java 求java大神帮忙 求大神帮助!Java 相关问题: 匿名网友: 普通类 public class CircularA { //求圆 ...

  4. matlab进行道格拉斯筛选,用MATLAB计算柯布道格拉斯函数,需要计算程序,急!谢谢大神...

    用MATLAB计算柯布道格拉斯函数,需要计算程序,急!谢谢大神0 产值.资金.劳动力关系函数问题具体内容增加生产.发展经济所依靠的主要因素有增加投资.增加劳动力以及技术革新等,在研究国民经济产值与这些 ...

  5. spring3.2入门到大神(备java基础、jsp、servlet,javaee精髓)-任亮-专题视频课程

    spring3.2入门到大神(备java基础.jsp.servlet,javaee精髓) 课程介绍         框架介绍,IoC思想.DI依赖注入.Bean的实例方式.Bean种类.Bean作用域 ...

  6. JAVA2块钱瓶子_啤酒2元一瓶,4个瓶盖换一瓶,2个空瓶换一瓶,问:10元钱可以喝几瓶。用java编程解出答案,求大神们帮忙...

    点击查看啤酒2元一瓶,4个瓶盖换一瓶,2个空瓶换一瓶,问:10元钱可以喝几瓶.用java编程解出答案,求大神们帮忙具体信息 答:package test;public class Test {publ ...

  7. MySQL---数据库从入门走向大神系列(七)-Java访问数据库配置及简单使用方法execute

    从操作配置文件properties中读取连接字符串,通过该字符串进行数据连接,需要写三个文件其中,两个是java类,一个是后缀名为.properties的文件,该文件放在src工作目录下. 需要准备的 ...

  8. Java 工程师,掌握这些,你离大神只差一步

    1 基础篇 01 面向对象 → 什么是面向对象 面向对象.面向过程 面向对象的三大基本特征和五大基本原则 → 平台无关性 Java 如何实现的平台无关 JVM 还支持哪些语言(Kotlin.Groov ...

  9. Java大神推荐,java编程基础必备(必看)

    在没有以前的操作习惯的错误情况下,反而容易接受新知识,所以不要因为自己对java一无所知而自卑,相反,这是菜鸟们的优势,但是如何才能从一个菜鸟历练成大神呢,当然是需要学习了,不学习就想成为大神,就是在 ...

最新文章

  1. 只需5行代码,手把手教你快速实现图像分割,代码逐行详解!
  2. 开源要“开”得安全高效:开源云计算的五大发展趋势
  3. spring security 注解不生效的一些隐含问题
  4. JQuery/JS select标签动态设置选中值、设置禁止选择 button按钮禁止点击 select获取选中值...
  5. 利用HTML5的devicemotion事件实现手机摇一摇抽奖,年会抽奖
  6. JMeter篇01:JMeter在Mac下的安装
  7. linux是32还是64位,如何看linux是32位还是64位
  8. 【CodeForces-1041C】Coffee Break(贪心,STL,set二分维护,题意难,有坑,SJ题,构造)(知识点总结)
  9. 深度学习(六十四)Faster R-CNN物体检测
  10. MySQL时间段查询,无数据补0
  11. [RMAN]控制文件的恢复
  12. 判断socket断开
  13. 惠普瘦客户机多屏显示T5740
  14. Ubuntu 15.04 Gogs(git 版本库) 二进制安装
  15. mysq命令行导出sql_mysql 命令行导入导出.sql文件
  16. JavaScript启示录
  17. steam遇到错误代码解决方案
  18. cfa英语不好的怎么学_英语不好能考CFA吗?看看他是怎么做到的
  19. 关于广州“开四停四“违法逻辑实现
  20. Kinect驱动识别及SDK下载问题

热门文章

  1. GitLab CI 中激活Anaconda环境
  2. Java交替打印两个字符串
  3. 彻底理解Python切片
  4. windows设置开机启动项
  5. AttributeError: module ‘cv2.cv2‘ has no attribute ‘bgsegm‘
  6. 马尔科夫过程与吉布斯采样
  7. 数据结构与算法之美学习笔记:哈希算法-哈希算法在分布式系统中有哪些应用(第22讲)...
  8. Reachability from the Capital
  9. Storm sql 简单测试
  10. 基于motion的视频压缩的实时监控系统