生成签名文件的两种方式

加解密算法的分类

  加解密算法基本上可以分为三类,它们分别是对称性解密算法、非对称性加密算法和消息摘要算法。每一类算法中又有多个不同的具体算法。对于这些算法,我们不要求完全掌握,但是对于各类算法的特点和用途是一定要了解的,对于一些常见的名字,如 DES、AES、RSA、DSA、MD5、SHA1 等,一定要熟悉,至少要知道它们分别属于哪类算法。

  对称性加密算法使用同一个密钥对信息进行加密和解密,其信息的安全性一部分取决于加密算法和密钥的长度,另一部分取决于密钥在传递过程中是否会被截获或盗取。非对称性加密算法使用两个密钥分别对信息进行加密和解密,这两个密钥称为私钥/公钥对。使用私钥加密的信息必须使用公钥解密,反之亦然。公钥可以公开发布,私钥由加密方保存,绝对不公开,将私钥被截获或窃取的可能性降到最低,因此非对称性加密算法的安全性比对称性加密算法的安全性更高。既然非对称性加密算法比对称性加密算法安全性更高,那对称性加密算法有什么存在的必要呢?这是因为对称性加密算法的运算速度更快。现实中,往往将对称性加密算法和非对称性加密算法结合使用,对于要传输的大块数据使用对称性加密算法加密,然后对加密使用的密钥使用非对称性加密算法进行加密,这样既可以获得更高的安全性,又可以获得更高的加解密运算速度。常用的对称性加密算法有DES算法、AES算法、3DES算法、TDEA算法、Blowfish算法、RC5算法、IDEA算法。常用的非对称性加密算法有DSA算法、RSA算法、Elgamal算法、背包算法、Rabin算法、D-H算法、ECC算法(椭圆曲线加密算法)。

  消息摘要算法的主要目的是对数据生成摘要。消息摘要算法不需要密钥,只有输入相同的数据才能得到相同的摘要,而且不可能从摘要反过来推算出数据。常用的消息摘要算法有MD5算法和SHA-1算法及其大量的变体。它们可以用来保证数据的完整性,在网络上发布文件时,常同时提供该文件的MD5值就是利用的消息摘要算法的这个特点,一旦该文件被篡改或者在网络传输中出现数据错误,再对其进行摘要运算就得不到相同的MD5值。

  对数据进行签名是我们在网络中最常见的安全操作。签名有双重作用,作用一就是保证数据的完整性,证明数据并非伪造,而且在传输的过程中没有被篡改,作用二就是防止数据的发布者否认其发布了该数据。签名同时使用了非对称性加密算法和消息摘要算法,对一块数据签名时,会先对这块数据进行消息摘要运算生成一个摘要,然后对该摘要使用发布者的私钥进行加密。接收者接受这块数据后,先使用发布者的公钥进行解密得到原数据的摘要,再对接收到的数据计算摘要,如果两个摘要相同,则说明数据没有被篡改。同时,因为发布者的私钥是不公开的,只要接收者通过发布者的公钥能成功对数据进行解密,就说明该数据一定来源于该发布者,他再怎么抵赖也没有用。

  那么问题来了,怎么确定某公钥一定是属于某发布者的呢?这就需要证书了。证书由权威认证机构颁发,其内容包含证书所有者的标识和它的公钥,并由权威认证机构使用它的私钥进行签名。信息的发布者通过在网络上发布证书来公开它的公钥,该证书由权威认证机构进行签名,认证机构也是通过发布它的证书来公开该机构的公钥,认证机构的证书由更权威的认证机构进行签名,这样就形成了证书链。证书链最顶端的证书称为根证书,根证书就只有自签名了。总之,要对网络上传播的内容进行签名和认证,就一定会用到证书。关于证书遵循的标准,最流行的是 X.509,关于证书的具体内容,网络上一搜一大把,我这里就不讲了。

以上文字出自http://www.cnblogs.com/youxia/p/java002.html#_label0

Keytool介绍

Keytool 是一个Java数据证书的管理工具 ,Keytool将密钥(key)和证书(certificates)存在一个称为keystore的文件中在keystore里,包含两种数据:密钥实体(Key entity)-密钥(secret key)或者是私钥和配对公钥(采用非对称加密)可信任的证书实体(trusted certificate entries)-只包含公钥

Keytool工具位于JDK  目录下的bin 目录下keytool.exe  一般配置了环境变量path都可以直接使用

有关keytool常用的命令可以参考https://www.chinassl.net/ssltools/keytool-commands.html

使用Keytool生成自己的密钥


生成密钥

D:\>keytool -genkey -alias bieming -keyalg RSA -validity 20000 -keystore newkey.jks
我们就可以主播生成自己的密钥了。

首先解释下  相关参数 

-alias  bieming 产生别名 每个keystore 都有关联的这个独一无二的alias  别名通常不区分大小写

-keyalg RSA 指定加密算法  这里指定的是 RSA  ,如下图查看密钥信息得到


-validity 20000  指定证书的有效时间 单位:天  这里指定的是20000天

-keystore newkeys.jks  指定密钥库的名称  

CMD下 输入以上命令以后直接回车,会提示  输入密钥库口令:输入完成后再重复输入一遍  (输入的口令不能少于6位,而且输入的时候你看不见,安全起见嘛

回车以后按照提示一步一步设置

  1. 您的名字与姓氏是什么?  ****
  2. 您的组织单位名称是什么?  ****
  3. 您的组织名称是什么?   ****
  4. 您所在的您所在的省/市/自治区名称是什么? ****
  5. 城市或区域名称是什么?   ****
  6. 该单位的双字母国家/地区代码是什么? cn
  7. *******是否正确?  输入y/n即可 y表示正确
  8. 输入 的密钥口令  同样不少于6位 重复输入即可

这样,就在当前目录下生成了自己的密钥,如下是我写的一个demo的截图

生成签名文件的两种方式_第1张图片


查看密钥信息

D:\>keytool -list -v -keystore D:\newkeys.jks

最后一个参数是密钥的路径

这样就可以查看相关密钥的信息了

如图查看之前生成的密钥文件的信息

生成签名文件的两种方式_第2张图片

微信需要使用的一般就是应用签名的MD5值去除“:”,然后将大写字母转换成小写。

疑问:

在查看keytool 帮助的时候
 只有 -genkeypair   和  -genseckey  两条命令   并没有 -genkey 命令  但是还是执行了
猜想:使用-genkey 和 -genkeypair  时候等效,通过查看生成的密钥信息,是一样的(希望有各位指点)
D:\>keytool -genkey -alias biemings -keyalg RSA -validity 20000 -keystore newkey.jks

D:\>keytool -genkeypair -alias biemings -keyalg RSA -validity 20000 -keystore newkey.jks

对于keytool的其他命令还没有做过详细实践,后续更新。
本文如有错误欢迎指点,转载注明出处



你可能感兴趣的:(Android)