知识大全 实践对jar包的代码签名
Posted 知
篇首语:赋料扬雄敌,诗看子建亲。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 实践对jar包的代码签名相关的知识,希望对你有一定的参考价值。
这一节 以实践为主 在跟着我做相应的操作之前 我希望你已经能够理解笔记七所提到的概念 至少你应该对于笔记七的那个大图有所了解
好了!对于习惯用ecplise的朋友今天不得不逼迫你把jdk的环境搭建出来!下面让我们动手来实践一下对jar进行签名吧!
第一步 首先配置jdk的环境变量 如果你的电脑已经配置了 那直接跳过这一步
path=%JAVA_HOME%/bin
JAVA_HOME=C:/Java/jdk _
CLASSPATH= ;%JAVA_HOME%/lib/dt jar;%JAVA_HOME%/lib/tools jar
配置要这几个jdk的环境参数 好了 配完了 试着在cmd里跑一下java javac 看看命令是否生效 如果配置成功执行第二步
第二步 来写几个简单的类 简单的才是大家的 你完全可以直接copy我的代码 部分看不懂 忽略它 做实验而已 对那个jar文件签名不是签 这个例子的代码逻辑是后面才用到的 不用读
第一个类Doer
package yfq test;
public abstract interface Doer
void doYourThing()
第二个类
package yfq test friend;
import java security AccessController;
import java security PrivilegedAction;
import yfq test Doer;
public class Friend implements Doer
private Doer next;
private boolean direct;
public Friend(Doer next boolean direct)
this next=next;
this direct=direct;
@Override
public void doYourThing()
System out println( Im a Friend )
if (direct)
next doYourThing()
else
AccessController doPrivileged(new PrivilegedAction()
@Override
public Object run()
next doYourThing()
return null;
)
第三个类
package yfq test stranger;
import java security AccessController;
import java security PrivilegedAction;
import yfq test Doer;
public class Stranger implements Doer
private Doer next;
private boolean direct;
public Stranger(Doer next boolean direct)
this next = next;
this direct = direct;
@Override
public void doYourThing()
System out println( Im a Stranger )
if (direct)
next doYourThing()
else
AccessController doPrivileged(new PrivilegedAction()
@Override
public Object run()
next doYourThing()
return null;
)
好了 编译一下 用强大的ecplise来编译 项目 右键 Build Project(工具是拿来用的 不要浪费这些强大的功能!)
第三步 打jar包 用ecplise就可以了就有导出jar包的功能 我还是那句老话 有工具不用 不是牛 是蠢
步骤一 项目 右键 Export java JAR file next
步骤二 展开目录清单 分别对 yfq tes friend和 yfq test stranger打包(friend jar stranger jar) 放到哪里就随便你了 只要你记得就好 我这里假设是放在d盘的根目录下
第四步 用java的keytool生成密钥对 用java的jarsigner做签名(记得笔记七我们说过对hash摘要的加密是非对称加密的吗?这里就需要两把不同的钥匙啦) 一步步跟我来
步骤一 cmd窗口 进入到存放friend jar和stranger jar的目录下 假设我的jar文件放在d盘下 直接输入盘符d:就可以了
步骤二 在cmd窗口中输入keytool genkey alias friend keypass friend life validity keystore ijvmkeys
生成第一个密钥对 这个密钥对的别名是 friend 查看密钥对所需要的密码是friend file 密钥对的过期时间是 天 密钥对存储的文件名ijvmkeys
而查看ijvmkeys的密码我们设置为ijvm ed
步骤三 在cmd窗口输入 keytool genkey alias stranger keypass stranger life validity keystore ijvmkeys
按照步骤 的截图 一步一步输入吧 这个步骤是生成别名为stranger的密钥对
好了密钥对生成结束 看看你的jar文件目录下有没有多出一个文件ijvmkeys 是滴 这里生成了一个用于存放密钥对的文件
步骤四 对jar进行摘要并对hash摘要进行加密生成签名 放置到jar文件结构的尾部
在cmd窗口输入
jarsigner keystore ijvmkeys storepass ijvm ed keypass firend file friend jar friend
jarsigner keystore ijvmkeys storepass ijvm ed keypass stranger file stranger jar stranger
步骤五 查看生成的密钥文件 在cmd窗口输入keytool list v keystore ijvmkeys storepass ijvm ed 查看上面最后一个截图 我们来验证一下在笔记七里说过的话
我们说过hash摘要是一个 的值 对不对呢 看证书指纹那一行 md :…
你数一数总共有几个十六进制数 个 一个十六进制数用 个位可以表示完 那么总共是几位 * = 但是后面还有一个sha 的 怎么回事他貌似不止 位 是滴 散列函数多种多样 到底用那个散列函数 md 还是sha 这个就看你喜欢 而要使用哪个散列函数是可以指定的 keytool的参数 keyalg DSA 这个参数就是用来指定用什么散列算法的 默认的就是DSA 普通的 位散列数已经是安全的了
在 笔记七中 记不记得最下面那个图 有一个认证机构会对解密签名(被加密的hash摘要)的公钥做认证(也就是加密公钥) 并发布证书 我们这里没有认证机构 你有没有这个疑问?
keytool程序在生成密钥时 总是会生成一个自签名证书(自签名是指 如果附近没有认证机构 可以用私钥对公钥签名 生成一个自签名证书)
总结
cha138/Article/program/Java/hx/201311/25819相关参考
Ant实战之Jar文件数字签名的制作 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! buildp
知识大全 jquery 获取标签名(tagName)示例代码
jquery获取标签名(tagName)示例代码 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
基于jQuery的获取标签名的代码 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!jquery如何获
软件代码数字签名和ActiveX控件基础知识 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 什么
知识大全 在Jini,RMI和Applet中如何实现代码签名
在Jini,RMI和Applet中如何实现代码签名 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
springjar是包含有完整发布的单个jar包springjar中包含除了springmockjar里所包含的内容外其它所有jar包的内容因为只有在开发环境下才会用到springmockjar来
在通过精美的包装盒销售软件的时代大家使用什么防伪标志等来让用户识别什么是正版软件但在当今的网络时代有利的一面是软件开发商可以通过网络不受时间地域的限制而快速发行软件但不利的一面则是用户无法辨认软件的真
借Struts核心jar包下的Filter包的errorftl文件来学习一下freemaker的标记语法 该ftl模板(errorftl)用于指示开发者Struts页面请求出错后指定转向该模板所
天津唐先生家里最近正在进行软包背景墙的装修工作,唐先生对这方面不太了解,因此放手让施工队去做,唯一的要求就是好看、实用。可是施工队却辜负了唐先生的信任:施工队在对房间需要软包的墙面的装饰尺寸、造型等进
在这个网址下载一个调用ssh和scp命令的jar包 然后就可以写程序了将上面的jar包导入MyEclipse下面是一个类的实例代码 packagehh; importjavaioBuffer