Java安全API

java提供了完整的密码学API,我们可以结合密码学相关的概念来系统的学习这些API。

1.密码学简介(crypto)
密码学通俗来说就是研究如何对信息进行加密和破密,如果不是专门研究信息安全,通常我们只需学习和使用加密的方法,所以破密的相关知识我们可以忽略。

2.加密(Encrypt)
单以加密来说,密码学可以分为经典密码学和现代密码学,经典密码学的重点在于加密算法,利用移位,替换等方法对信息进行加密,一旦算法被人破译那么信息就会泄露。而现代密码学则不同,现代密码学的安全性是基于密钥,算法反而是公开的。根据密钥的不同,现代密码学可以分为对称加密和非对称加密,顾名思义,对称加密就是通讯双方使用同一对密钥,而非对称加密则是双方都拥有一对私钥和公钥,私钥自己保存而公钥可以对外交换。这样就可以避免对称加密在密钥交换时泄漏的风险。

3.信息摘要(Message Digest)
把任意长度的信息压缩成固定长度,在密码学上把经过hash算法计算压缩后的数据称为信息摘要。我们可以通过对比接收到的信息摘要来检验数据的完整性,防止数据在传输过程中被篡改。信息摘要的重点其实就是hash算法。
1281680-20190416154419805-1892415951.png

4.数据签名(signature)
要验证数据的完整性,只有信息摘要还是不够的。因为如果攻击者猜测到生成的信息摘要使用的是哪种hash算法(毕竟hash算法其实就MD5,SHA-1那几种),那么攻击者可以篡改信息后,重新生成信息摘要,所以还需要对信息摘要进行加密。数据签名其实可以理解为信息摘要和非对称加密的结合体。
1281680-20190416154356804-2135456632.png

5.Java安全体系
Java 安全体系 API 分为四部分:JCA、JCE、JSSE 和 JAAS。
JCA:Java API 提供基本的加密框架,比如证书、数字签名、消息摘要和密钥产生器。
JCE:是 JCA 的扩展,提供各种算法的实现、密钥管理等功能,主要位于 javax.crypto 及子包中。
JSSE:是 Java 安全套接字扩展的缩写,主要提供基于 SSL 安全网络通信的 API。
JAAS:是 Java 授权与认证服务的缩写,主要用于登录认证与角色权限等管理的 API。
JCA 和 JCE 并不提供任何加密算法的实现,只是提供接口供第三方实现加密算法。第三方厂 商根据 JCE 的接口实现加密算法,并打包成 Provide(安全提供者),就可以动态地添加到 Java 之中。加载第三方的 JCE 实现,主要有两种方式:a.使用 JRE 的 java.security 文件在 JVM 启 动时添加;b.使用 Provider 管理器 java.security.Security 的静态方法在运行时添加。hotspot虚拟机默认实现了一个Provide-SunJCE,除了Java默认提供的之外,比较著名的第三方实现还有Bouncy Castle 开源类库。
1281680-20190416154648004-129145204.jpg

6.密码学相关API
java.security.MessageDigest:产生消息摘要对象的工厂类

例子MessageDigest digest = MessageDigest.getInstance("MD5");byte[] bytes = digest.digest("MD5".getBytes());

加密密钥:
java.security.Key:所有密钥的抽象表示,含有算法、二进制编码、编码格式
java.security.spec.KeySpec:密钥规范(空接口),其下的实现类专用于将二进制密钥数据规 范化为密钥对象。
java.security.spec.EncodeedKeySpec:编码的密钥规范,主要是公钥和私钥规范的抽象。 公钥采用 X.509 编码,对应于 X509EncodedKeySpec 类;私钥采用 PKCS#8 编码,对应于 PKCS8EncodedKeySpec 类。
java.security.PublicKey:非对称密码公钥的抽象接口(空接口)
java.security.PrivateKey:非对称密码私钥的抽象接口(空接口)
java.security.KeyPair:非对称密钥的包装类,称为密钥对接口,里面有 getPublicKey 和 getPrivateKey 两个方法
java.security.KeyPairGenerator:随机产生非对称密钥对的工厂
java.security.KeyFactory:将二进制数据根据密钥规范还原非对称密钥的公钥或者私钥
java.security.SecureRandom:强随机数发生器,可由第三方提供随机算法
javax.crypto.KeyGenerator:随机产生对称密钥的工厂
数字签名:
java.security.Signature:产生数字签名对象的工厂类

例子
public static void keyDemo(byte[] privateKey,byte[] publicKey,byte[] content) throws Exception{KeyFactory keyf = KeyFactory.getInstance("RSA");//私钥PKCS8EncodedKeySpec keySpec = new PKCS8EncodedKeySpec(privateKey);PrivateKey prikey = keyf.generatePrivate(keySpec);//公钥X509EncodedKeySpec x509EncodedKeySpec = new X509EncodedKeySpec(publicKey);PublicKey pubKey = keyf.generatePublic(x509EncodedKeySpec);//签名Signature signature = Signature.getInstance("MD5withRSA");signature.initSign(prikey);signature.update(content);byte[] sign = signature.sign();//校验签名signature.initVerify(pubKey);signature.verify(sign);}

加密解密:
javax.crypto.Cipher:JCE核心的引擎类,提供加密解密功能。

        KeyPairGenerator generator = KeyPairGenerator.getInstance("RSA");KeyPair pair = generator.generateKeyPair();//私钥PrivateKey prikey = pair.getPrivate();//公钥PublicKey pubKey = pair.getPublic();//非对称加密Cipher cipher = Cipher.getInstance("RSA");cipher.init(Cipher.PUBLIC_KEY,pubKey);byte[] m = cipher.doFinal(content);Cipher cipher1 = Cipher.getInstance("RSA");//非对称解密cipher1.init(Cipher.PRIVATE_KEY,prikey);cipher1.update(m);byte[] s = cipher1.doFinal();System.out.println(new String(s));

总结:Java密码学相关的API提供了大量的工厂方法getInstance(String algorithm),根据不同的算法返回不同的实现类。这样的好处显而易见,这可以让你的代码与具体的算法无关,如果需要更换算法只需要把RSA换成其他算法,其他部分都不需要改变。甚至你还可以把String algorithm参数写到配置文件中,到时候连代码都不用改,直接改配置文件即可。

转载于:https://www.cnblogs.com/lanqi/p/10717365.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/483682.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

算法竞赛入门经典 例题6-6 小球下落(python、C)

同个人网站 https://www.serendipper-x.cn/,欢迎访问 ! 问题描述: 有一颗二叉树,最大深度为D,且所有叶子的深度都相同。所有结点从上到下从左到右编号为 1,2,3,… ,2D -…

NLPer,是时候重视因果推理了!这有一份杨笛一等撰写的综述

来源:机器之心编辑:张倩在这篇综述论文中,来自佐治亚理工学院的杨笛一等十几位研究者系统阐述了自然语言处理中的因果推理。科学研究的一个基本目标是了解因果关系。然而,尽管因果在生活和社会科学中扮演了重要角色,它…

【报告】2021物联网行业研究报告(附PDF下载)

来源:兴业证券编辑:Zero导语物联网通过智能感知、识别技术与普适计算等通信感知技术,广泛应用于网络的融合中,也因此被称为继计算机、互联网 之后世界信息产业发展的第三次浪潮。1、云管端的硬件升级云、管、端革新带动物联网爆发…

pyecharts 绘制地图

同个人网站 https://www.serendipper-x.cn/,欢迎访问 ! # 导入相关包 from pyecharts import options as opts from pyecharts.charts import Map, Geo, Lindata pd.read_csv(rC:\Users\1979\Desktop\处理后的数据\谷物产量(公吨&#xff0…

斯坦福大学报告称中国AI论文引用率首超美国!但李国杰院士也发文灵魂拷问...

来源:zhihu中国霸榜AI期刊论文发表,论文引用量「首超」美国!然而,中国工程院院士李国杰却戳着国内AI研究的脊梁骨说「顶不了天、落不了地」。近日,如何看待「李国杰院士发文称国内 AI 研究顶不了天、落不了地」这一话题…

刚刚,2021年诺贝尔生理学或医学奖揭晓!

来源:科学网作者:梅进 冯丽妃北京时间10月4日下午5点34分许,2021年诺贝尔生理学或医学奖揭晓。美国科学家David Julius、Ardem Patapoutian获奖,以表彰他们“发现温度和触觉的受体”。2021年的诺贝尔奖单项奖金为1000万瑞典克朗&a…

2021年诺贝尔物理学奖揭晓,复杂科学获得重视

来源:材料科讯部分内容整理:维基百科,诺贝尔奖官网及其推特账号刚刚,诺贝尔奖委员会宣布了2020年诺贝尔物理学奖得主名单,针对本年度诺贝尔物理学奖的预测,可参考以下链接:诺奖120周年了&#x…

【操作系统复习】操作系统的概念、功能和目标

同个人网站 https://www.serendipper-x.cn/,欢迎访问 ! 文章目录一、概念二、操作系统的功能和目标2.1 作为系统资源的管理者2.2 作为用户和计算机硬件之间的接口2.3 作为最接近硬件的层次一、概念 ✔️ 操作系统(Operating System&#xff0…

word 2013 标题设置多级列表

1、问题 要设置标题为多级列表,批量应用 2、解决 1选标题1 2选标题2 。。。以此类推。点确定保存即可 转载于:https://www.cnblogs.com/wdw31210/p/10723696.html

向量将死,哈希是 AI 未来

来源:AI科技评论作者:Hamish Ogilvy编译:冉启行校对:青暮人工智能是建立在向量算法的基础上的,但最新的进展表明,对于某些 AI 应用程序而言,它们可以使用其他二进制来表示(例如神经哈…

【操作系统复习】操作系统的特征

同个人网站 https://www.serendipper-x.cn/,欢迎访问 ! 文章目录一、并发二、共享三、虚拟四、异步一、并发 并发 :指两个或多个事件在同一时间间隔内发生。这些事件宏观上是同时发生的,但微观上是交替发生的。 并行&#xff1a…

评分效果

引用的图片 效果展示 代码 <!DOCTYPE html> <html lang"en"><head><meta charset"utf-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0, maximum-scale1.0, user-scalable0" />&…

为啥辣椒会辣得人嘴巴疼?这个问题竟然和今年诺奖有关

2021年诺贝尔生理学或医学奖得主&#xff1a;戴维朱利叶斯&#xff08;David Julius&#xff09;和阿尔代姆帕塔普蒂安&#xff08;Ardem Patapoutian&#xff09;来源&#xff1a;科研圈2021 年 10 月 4 日北京时间 17 时 30 分许&#xff0c;美国生理学家戴维朱利叶斯&#x…

瞭望|事关未来10~15年工业操作系统主导权之争,工业互联网下一步怎么走?...

来源&#xff1a;工信头条刊于《瞭望》2021年第39期文&#xff1a;李玉玲 王菲工业互联网事关未来10&#xff5e;15年工业操作系统主导权之争&#xff0c;事关我国制造业竞争优势的巩固与强化。近年来&#xff0c;我国工业互联网建设加速推进&#xff0c;产业规模不断扩大。专…

Node.js对MongoDB进行增删改查操作

MongoDB简介 MongoDB是一个开源的、文档型的NoSQL数据库程序。MongoDB将数据存储在类似JSON的文档中&#xff0c;操作起来更灵活方便。NoSQL数据库中的文档(documents)对应于SQL数据库中的一行。将一组文档组合在一起称为集合(collections)&#xff0c;它大致相当于关系数据库中…

【操作系统复习】操作系统的发展与分类

同个人网站 https://www.serendipper-x.cn/&#xff0c;欢迎访问 &#xff01; 操作系统的发展与分类一、手工操作阶段二、批处理阶段 —— 单道批处理系统三、批处理阶段 —— 多道批处理系统四、分时操作系统五、实时操作系统六、其他操作系统一、手工操作阶段 过程&#xf…

诺奖得主本庶佑:CNS这些顶刊观点有九成不正确,不要盲从迷信,搞科研做到六个C更重要...

来源&#xff1a;科研大匠整理翻译&#xff1a;思庐哲学诺奖可说是国人心中一直的痛。目前&#xff0c;在诺贝尔奖获奖国家中&#xff0c;美国堪称当之无愧的领头羊。截止发文&#xff0c;美国人已经获得了384枚诺贝尔奖&#xff01;因此&#xff0c;近代以来&#xff0c;我们一…

常见面试题

python题 1.类方法&#xff08;classmethod&#xff09;&#xff1a;1.在python中.类方法 classmethod 是一个函数修饰符&#xff0c;它表示接下来的是一个类方法&#xff0c;而对于平常我们见到的则叫做实例方法。 类方法的第一个参数cls&#xff0c;而实例方法的第一个参数是…

详解2021诺贝尔物理学奖:他们破译了地球气候及其他复杂系统的隐秘规律

来源&#xff1a;环球科学封面图来源&#xff1a;cjdrexel, CC PDM 1.010 月 5 日北京时间 17 时 45 分许&#xff0c;2021 年诺贝尔物理学奖被授予“对我们理解复杂系统的开创性贡献”&#xff0c;一半授予真锅淑郎&#xff08;Syukuro Manabe&#xff09;和克劳斯哈塞尔曼&am…

shark恒破解笔记3-EAX决定胜负

PEID查壳 od载入 输入假的注册码 查找出错字符串 往上查找是否有关键跳转和关键call 可以看到此处有个je跳转 实现了跳转&#xff0c;并且跳过了我们注册成功的地址 网上查找这个跳转的关键call&#xff0c;这个call很有可能就是判断一系列注册码是否正确然后返回一个代表是否注…