300字范文,内容丰富有趣,生活中的好帮手!
300字范文 > 使用eclipse实现阿里云物联网平台数字签名(Signature)(附源代码)

使用eclipse实现阿里云物联网平台数字签名(Signature)(附源代码)

时间:2021-01-27 19:02:08

相关推荐

使用eclipse实现阿里云物联网平台数字签名(Signature)(附源代码)

摘要:要实现对基于阿里云物联网平台的设备的控制,就需要调用阿里云的API。这些API不会让我们随意调用,而是有相当严格的审核机制,确保数据的安全。这种机制就是“签名机制”,我们每调用一次可以对硬件进行操作的API,就需要提供一次“数字签名”,阿里云物联网平台对每个接口访问请求的发送者进行身份验证,所以无论使用HTTP还是HTTPS协议提交请求,都需要在请求中包含签名(Signature)信息。阿里云只提供了数字签名的基本知识和一些代码,要想让这些代码跑起来,真正计算出来我们的数字签名,请看本文。

操作环境:win7 x64,eclipse -06 (4.20.0),jdk15.0.1,

目录

1.数字签名基本知识

2.安装eclipse

3.设置java的环境变量

4.设置eclipse工作目录

5.新建Java工程

6.新建阿里云物联网签名类

7.下载并导入依赖包

8.编译运行

提示:本文篇幅较长,适合新手跟着一步步做下来,单纯阅读,可能会显得枯燥。

1.数字签名基本知识

阿里云的数字签名机制文档连接如下,大家可以通过这篇文章学习签名的方法是什么。

签名机制

在摘要中已经提到了数字签名是为了安全,是将需要使用的内容通过某一种加密方式进行加密,然后再进行传输的机制。例如下面的这个URL请求,很长很长,使用等号=连接编码后的请求参数名和参数值。使用与号&连接编码后的请求参数。参数排序与步骤a的排序一致。

-/?MessageContent=aGVsbG8gd29ybGQ%3D&Action=Pub&Timestamp=-07-31T07:43:57Z&SignatureVersion=1.0&ServiceCode=iot&Format=XML&Qos=0&SignatureNonce=432101234567&Version=-01-20&AccessKeyId=testid&SignatureMethod=HMAC-SHA1&RegionId=cn-shanghai&ProductKey=12345abcde&TopicFullName=/12345abcde/testdevice/user/get

有一些符号是不能被URL传输的,需要进行变换,例如“/”和“=”等,就需要转换为特定的格式,上面的请求参数会转换成为下面的请求参数,注意,此时还没有加密,只是重新编码。

GET&%2F&AccessKeyId%3Dtestid%26Action%3DPub%26Format%3DXML%26MessageContent%3DaGVsbG93b3JsZA%25253D%26ProductKey%3D12345abcde%26Qos%3D0%26RegionId%3Dcn-shanghai%26ServiceCode%3Diot%26SignatureMethod%3DHMAC-SHA1%26SignatureNonce%3D432101234567%26SignatureVersion%3D1.0%26Timestamp%3D-07-31T07%253A43%253A57Z%26TopicFullName%3D%252F12345abcde%252Ftestdevice%252Fuser%252Fget%26Version%3D-01-20

那么加密后的结果是什么呢?一长串字符将转换成为下面的一小串字符。

+WylkkUnfSTNlT7oE9HdjiNT0NM=

得到签名之后,就可以应用到调用阿里云物联网平台的API操作中了,例如

-/?MessageContent=aGVsbG8gd29ybGQ%3D&Action=Pub&Timestamp=-07-31T07%253A43%253A57Z&SignatureVersion=1.0&ServiceCode=iot&Format=XML&Qos=0&SignatureNonce=432101234567&Version=-01-20&AccessKeyId=testid&Signature=%2BWylkkUnfSTNlT7oE9HdjiNT0NM%3D&SignatureMethod=HMAC-SHA1&RegionId=cn-shanghai&ProductKey=12345abcde&TopicFullName=%252F12345abcde%252Ftestdevice%252Fuser%252Fget

看上去比较简单,阿里云物联网平台也提供了参考代码,但是这些代码仅仅复制粘贴到vscode里面,还是无法直接执行的,您要想通过这几个源代码看到自己的数字签名是什么,还有很长很长的路要走。

为了让大家早日写出自己的APP,少走弯路,我使用eclipse调试成功数字签名计算的代码,在这里与大家分享一下。为什么选择eclipse而不是vscode的原因就不多说了,一句话,试出来的。

2.安装eclipse

下载当前版本的eclipse,当您看到这个文章的时候,可能版本又更新了,我目前用的版本是 -06 (4.20.0)。

下载连接:/downloads/

下载的速度跟网速和时段有关,有的时候快一些。下载结束之后,安装即可。推荐默认安装

因为要使用java编程,所以推荐第二种安装。

因为机器上已经安装了jdk,所以推荐默认安装。

安装完毕后就可以启动了

3.设置java的环境变量

花生提示:不要一看到环境变量就头晕,毕竟C是不用环境变量的,这个看上去很复杂。其实很简单。我画个图给大家看。我们知道,Java是一种解释性编程语言,它的运行需要在Java运行环境下才能被一边解释一边执行。在解释的过程中,需要与Java运行环境(虚拟机)不停地交互,需要运行Java的各种命令,而这些命令是由一长串的文件目录等组成的。要想对这些命令进行省略,达到只运行一个单词或者字母的目的,就需要“环境变量”,其实就是告诉操作系统,我调用的这个“单词”其实代表了“一句话”,照办就行。

环境变量需要设置3个,分别是JAVA_HOME,CLASS_PATH和path,具体的操作方式请自行网络学习。

需要注意的是

环境变量设置好后,打开命令行,输入java -version,会输出下图所示的界面。表示环境变量设置成功。如果不设置环境变量,java -version将被很长的一句指令代替。

4.设置eclipse工作目录

初次运行,会提示设置工作目录,自己选择在一个硬盘分区中建立即可,这个目录设置的原则是“好记,好找”。例如我设置的是d:\eclipse_work。

5.新建Java工程

为什么需要新建一个Java工程?是因为单独运行阿里云的源代码运行不了,还需要eclipse强大的自动化工程管理功能提供支持才能成功运行。

首先新建一个project

接着选择java project

为自己的工程起个名字,例如叫做AliyunSignature。

一直选择默认,就新建工程完毕了,起初是有一个module-info.java类,这个类非常重要,我们的依赖包就需要在这个文件里面进行设置。后面再详细介绍。

6.新建阿里云物联网签名类

根据官方文档/document_detail/30563.html?spm=a2c4g.11186623.6.804.5b863f83S2O8xh

计算数字签名的java类有4个,我们需要将这些类一一新建,将源代码复制过来。

在src文件夹上右键选择新建class。

例如新建Config.java,我们为类起个名字叫做Config,注意这个名字要与文件名字相同。package写了一长串,是规范的用法,对于本文来说,圆点左右都是一个文件夹的名字。

例如com文件夹下有一个文件夹aliyun,aliyun文件夹下有一个iot文件夹。

在阿里云帮助文档中复制源代码

然后粘贴到Config.java相应的位置,注意有所取舍,不能将所有的代码都粘贴过来,因为新建类的时候,eclipse已经为我们把框架搭建好了。我们在这个文件中,需要将自己的accessKey和accessKeySecret两个参数填写进来。

accessKey和accessKeySecret两个参数的获取方法是登陆阿里云物联平台,然后点击头像,选取AccessKey管理选项,再逐步设置。

可以使用账号自身的,也可以使用RAM的,相当于子账号,新建之后会提示密码(accessKeySecret),一定要保存好。

按照相同的方法新建其他3个类。

7.下载并导入依赖包

文章开头讲了我们需要将传输的url字符串进行加密编码,就需要两个依赖包。其中StringUtils包的操作对象是Java.lang.String 类型的对象,是 JDK 提供的 String 类型操作方法的补充,StringUtils 中一共有130多个方法,并且都是 static 的,所以我们可以这样调用 StringUtils.xxx()。

import mons.codec.binary.Base64;import mons.lang3.StringUtils;

我们要把把无法网络传输的字符,如“/”“=”等转换为可以被读取的字符,这个步骤就需要base64编码。Base64是网络上最常见的用于传输8Bit字节码的编码方式之一,Base64就是一种基于64个可打印字符来表示二进制数据的方法。Base64可以用作HTTP表单和HTTP GET URL中的参数。这种方法有编码和解码两种操作,网上有很多这方面的例子,可以将一串乱码解读成为一句完整的话。

在eclipse中,我们按照阿里云的官方帮助文档/document_detail/30563.html?spm=a2c4g.11186623.6.804.5b863f83S2O8xh

将4个java文件复制粘贴后,eclipse就会自动提示我们这些源代码中有错误。错误是导入这两个包失败。所以我们需要手动导入这两个包。

从网络上搜索这两个包的名字是不可以的,因为他们对应的包的名字并不是本来的面目。他们与所需导入的jar包的对应关系如下图所示,分别需要导入的是commons.codec包和commons.lang3包。

下载的途径有很多,可以官方下载,也可以第三方下载,两个包都不大。下载后,请将其放在工程目录下的lib文件夹,如果没有这个文件夹,请自己新建一个。

安装jar包的方法也很简单,在工程名右键选择属性properties,然后点击“Java Build Path”选项,切换到Libraries选项卡,就可以导入了。导入的按钮名称是“Add External JARs”。

安装完的效果如下图所示。

安装完毕之后,并不是说源代码的错误自动消失了,这里有一个关键点,就是还要添加依赖。如下图所示,在import mons.codec.binary.Base64还有错误提示,“The type mons.binary.Base64 is not accessible”。同时,还自动提供了6种快速修复的方法,这里我们选择倒数第二个选项“Add 'requires commons.codec‘to module-info.java”,这句话就是“自动添加依赖”的意思,添加依赖到哪里呢?到module-info.java。如果您是初学者,自动添加是减少编程错误的唯二方法之一。

自动添加依赖之后的效果如下图所示,在module AliyunSignature中添加了依赖“requires commons.codec”。

同样的方式,添加另外一个包。

添加完两个包之后,自动提示的错误消失,可以编译运行了。

8.编译运行

进行到这里,激动人心的时候就要到了。可以直接点击运行快捷键,在Console区域观察输出结果。

假如我们需要实际计算在阿里云物联网平台注册的设备的签名,就需要将一些信息修改。首先是accessKey和accessKeySecret。

accessKey和accessKeySecret两个参数相当于自己的阿里云物联平台的账号和密码,获取的方式是登陆阿里云,点击自己的头像,然后选择“AccessKey管理”,这样就可以获取两个参数了。如果没有,可以在打开的界面新建一个。注意,首次新建可以看到,要保存好,下次再看就看不到了。

然后需要在main.java填写设备的信息,分别是DeviceName和ProductKey。

修改完这两处之后,就可以运行查看一下效果了。

运行效果如下图。可以看到两种方法计算出来的签名不一样,这个不用担心,因为第一种方法没有修改DeviceName、ProductKey、accessKey和accessKeySecret,第二种方法已经修改为自己的这些市级参数了。

如下图所示,我们看到,第一种方法用的是一串相当长的字符串。而且几个参数没有改为实际设备的参数。与第二种方法相比,这种方法易读性差,所以阿里云也推荐使用第二种方法进行计算。

再看第二种方法,使用map对每一个参数进行分块式设置,明显好很多了。如果自己的设备发生改变,修改相应位置的参数即可。

至此,就完成了eclipse环境下阿里云物联网平台数字签名的程序就调试完毕了。

写的比较啰嗦,力图将每一个细节都讲到,希望能够帮助到大家。

源代码可以通过两种途径获取。

第一种是通过CSDN资源下载,链接是:

/download/youngwah292/20469671

第二种是通过微信索取。

下一篇文章将介绍如何通过android studio制作安卓APP来实现数字签名,移动端实现数字签名,将为您打开一扇全面掌控物联网的大门,敬请期待!

作者长期致力于物联网知识的普及,关注我,带您玩转物联网。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。