java jvm学习笔记七(jar包的代码认证和签名)
欢迎装载请说明出处:http://blog.csdn.net/yfqnihao
前言:
如果你循序渐进的看到这里,那么说明你的毅力提高了,jvm的很多东西都是比较抽像的,如果不找相对应的代码来辅助理解,其实很难有个比较形象的思维,前面我努力的尝试通过将概念投射到代码的方式去讲解jvm的各个细节,希望你能够试着自己也去找到对应的代码段,然后试着读一读。一开始可能没有那么容易,但是没有一件事情,一开始就是容易的。
代码认证与签名
终于到了这一节,这一节,其实相对于笔记二,笔记三和笔记四,是相对比较容易的,即使你对密码编码学一窍不通也不妨碍你学习,我们不会涉及到太多的实现,而主要从应用着手,旨在浅显易懂,触类旁通。在下一节中,我们会来尝试做一次签名,前提是你看完这一节
笔记3的时候我们曾经提到class文件的校验器,记得它分为几趟不,四趟,而jar包的代码签名认证和class检验的第一趟是有联系的。
class文件校验器的第一趟会对jar文件的结构,长度等进行校验,其中也包括对jar的签名和认证进行校验。
那么什么是jar包的签名和认证?
我们相关的class文件打包成了jar包之后,在传递这个jar的时候,如何防止jar不被他人暗中的修改呢?
方案一,可能你会想到对整个jar文件进行加密,这个思路是可行的,但是却显得比较笨拙,对每个jar文件都执行加密,需要的时候又要执行解密,不仅浪费时间,效率上也是不可取的。
方案二。对jar包的部分内容进行加密,这个思路好像效率高点,但是对哪一部分进行加密?如果没有加密的那一部分被修改了怎么确认?这又一个问题。
以上两种简单地解决方案虽然看起来简单但是实施起来都是有困难的,那么有没有好的方法?
有,在jar文件上hash摘要,什么是hash摘要,这里我不丢书包了,简单的说hash摘要就是有一个叫hash(String content)的哈希函数,当你传入内容的时候它都将返回一个独一无二个的128的hash数值,这样无论传入的内容多大,hash摘要的长度是固定的。当然附加到jar文件的最后面时总体上并不会影响jar的结构和传输。
只要接收方也拥有这个hash函数,那么将jar的内容进行hash后的值再和附加在jar中的hash值做对比就可以知道jar的内容是否被修改过了,看起来好像完美了,但是如果有意破坏的人把jar和hash都替换成具有破坏性ar文件以及由这个具有破坏性的jar文件进行hash运算的hash值,那么前面做的事情也就都没有意义了,于是聪明的人类想到了对hash摘要运用私钥进行加密,这样只有加密方才能对hash值加密,而解密的那方运用公钥进行解密,而且它总是知道怎么解密的,我们把对hash摘要进行加密的过程称之为签名。这就是jar包签名的大致过程
好吧,上面引述了那么多,无非是想描述下面图3-3的过程,如果你看到这个图完全明白,那前面那段废话就直接跳过吧!

接下来还有一个概念需要你理解----认证
先不管什么是认证,先来了解一下密码学的一点小知识
前面我说过,看这篇文章是不需要你有密码学的知识的,是的,我骗你,至少基本的概念还是要理解过的。如果你完全不懂,不要慌,我举个简单的例子来帮你简单的理解一下一两个基本的概念。
第一个概念对称加密,什么是对称加密?假设A想要说暗语,A想说5的时候就把5*3,然后把5*3的结果15告诉B,因为B知道A说暗语的规则,所以B就把15除以3,知道A要告诉自己5,这就是对称加密。
第二个概念非对称加密,假设A要把一句话告诉B,A就把这句话放到一个有两个完全不同的锁(lock1,lock2)的箱子里,然后锁上,A有lock1的钥匙,把箱子交给B,而B拥有lock2的钥匙,B通过打开lock2也能看到箱子里的字条,这就是非对称加密。而A拥用的那把钥匙叫私要,B拥有的那把钥匙复制多份之后分给他们组员,就成了公钥。
没有那么可怕对吧!而在这里我应该负责任的告诉你,对于hash摘要的签名用的就是非对称加密!
回到我们的主题,什么是认证,当我们队hash摘要用私钥进行加密,然后把公钥发给B和B组里的所有人的时候,如果中间传递的环节被人偷天换日的将公钥换掉了,这个时候,jar文件的签名的真实性又受到了威胁,怎么保证传递公钥的时候,公钥的真实性,这就是我们提到的认证,我们如果把公钥交给一个公正的认证机构,认证机构对你的公钥进行加密之后的序列号,我们就称为证书,需要公钥的人得带证书后向认证机构申请解密,这样安全性就好很多了。
上面的一堆废话,其实也是为了描述下面这个图的整个过程,如果你一眼就看明白下面这个图,那就忽略上面的描述吧

好吧,这一节的内容全是概念,概念只需要你看而不是要你背,在某个时候你会焕然大悟的,而这个时间应该会是在下一节java之jvm学习笔记八(实践对jar包进行签名)
java jvm学习笔记七(jar包的代码认证和签名)的更多相关文章
- java之jvm学习笔记六-十二(实践写自己的安全管理器)(jar包的代码认证和签名) (实践对jar包的代码签名) (策略文件)(策略和保护域) (访问控制器) (访问控制器的栈校验机制) (jvm基本结构)
java之jvm学习笔记六(实践写自己的安全管理器) 安全管理器SecurityManager里设计的内容实在是非常的庞大,它的核心方法就是checkPerssiom这个方法里又调用 AccessCo ...
- Java IO学习笔记七:多路复用从单线程到多线程
作者:Grey 原文地址:Java IO学习笔记七:多路复用从单线程到多线程 在前面提到的多路复用的服务端代码中, 我们在处理读数据的同时,也处理了写事件: public void readHandl ...
- java jvm学习笔记八(实现jar包的代码签名)
欢迎装载请说明出处:http://blog.csdn.net/yfqnihao/article/details/8267669 课程源码:http://download.csdn.net/detai ...
- java jvm学习笔记十二(访问控制器的栈校验机制)
欢迎装载请说明出处:http://blog.csdn.net/yfqnihao 本节源码:http://download.csdn.net/detail/yfqnihao/4863854 这一节,我们 ...
- java jvm学习笔记十一(访问控制器)
欢迎装载请说明出处: http://blog.csdn.net/yfqnihao/article/details/8271665 这一节,我们要学习的是访问控制器,在阅读本节之前,如果没有前面几节的 ...
- java jvm学习笔记十(策略和保护域)
欢迎转载请说明出处:http://blog.csdn.net/yfqnihao/article/details/8271415 前面一节,我们做了一个简单的实验,来说明什么是策略文件,在文章的最后,也 ...
- java jvm学习笔记二(类装载器的体系结构)
欢迎装载请说明出处:http://blog.csdn.net/yfqnihao 在了解java虚拟机的类装载器之前,有一个概念我们是必须先知道的,就是java的沙箱,什 ...
- 2017/1/7 学习笔记 jar包,maven
① 关于tar,jar,war文件 tar是通用的另一种打包格式,为了部署到服务器时方便. jar是java app server识别的java部署格式,其实是Zip文件,只是内部的文件有规范. wa ...
- 2017/01/07 学习笔记 jar包,maven
① 关于tar,jar,war文件 tar是通用的另一种打包格式,为了部署到服务器时方便. jar是java app server识别的java部署格式,其实是Zip文件,只是内部的文件有规范. wa ...
随机推荐
- 【BZOJ 1053】[HAOI2007]反素数ant
Description 对于任何正整数x,其约数的个数记作g(x).例如g(1)=1.g(6)=4.如果某个正整数x满足:g(x)>g(i) 0<i<x,则称x为反质数.例如,整数1 ...
- 如何在windows下安装GIT
如何在windows下安装GIT 分步阅读 Git是一个免费的.开源的版本控制软件.在Windows上安装git,一般为msysgit,官方下载地址为 http://code.google.com/p ...
- APP中数据加载的6种方式-b
我们看到的APP,往往有着华丽的启动界面,然后就是漫长的数据加载等待,甚至在无网络的时候,整个处于不可用状态.那么我们怎么处理好界面交互中的加载设计,保证体验无缝衔接,保证用户没有漫长的等待感,而可以 ...
- Ext4.2 grid 条件查询使用
项目中用到Ext4.2,初次接触,用的不是太熟,做个总结,恳请指正! 1.grid重新设置条件,查询结果不是从第1页开始 在处理grid条件查询时,点击搜索按钮调用store.load()方法时,会把 ...
- java程序练习:猜字母
猜字母程序=数据结构+算法 首先:定义数据结构1.找名词Input:输入变量Output:输出变量隐含:找到隐含的变量,如字符串 其次:定义算法,程序的处理 最后:按照顺序,逐步实现 注意:1.基本数 ...
- ExtJS4.2学习(三)Grid表格(转)
鸣谢:http://www.shuyangyang.com.cn/jishuliangongfang/qianduanjishu/2013-11-07/172.html --------------- ...
- 解决WIN8 磁盘100 活动占用100% win8硬盘一直响
一.先看最终效果: 二.再说解决办法: 1.任务管理器关闭进程 taskhost.exe和类似于taskhostxx.exe开头的进程. 2.在电源管理里面设置2分钟不使用硬盘则关闭硬盘,看我的截 ...
- [笨木头FireFly 02]入门篇2_客户端发送请求,服务器处理请求
原地址:http://www.9miao.com/question-15-53940.html 好,经过上一篇不权威的讲解,大家已经能轻易地让客户端和服务端连接起来了. 但是,仅仅是连接了,可它们俩不 ...
- Notifications Nagios
Introduction I've had a lot of questions as to exactly how notifications work. This will attempt to ...
- linux踢人命令 pkill踢人用法
首先使用who命令查看在线用户,然后踢人. 强制踢人命令格式:pkill -kill -t tty 解释: pkill -kill -t 踢人命令 tty 所踢用户的TTY或者pts/x(x代表数字) ...