一.密码常用术语
明文:待加密信息
密文:经过加密后的明文
加密:明文转为密文的过程
加密算法:明文转为密文的转换算法
加密密钥:通过加密算法进行加密操作用的密钥
解密:将密文转为明文的过程
解密算法:密文转为明文的算法
解密密钥:通过解密算法进行解密操作用的密钥
密码分析:截获密文者试图通过分析截获的密文从而推断出原来的明文或密钥的过程
主动攻击:攻击者非法入侵密码系统,采用伪造、修改、删除等手段向系统注入假消息进行欺骗。(对密文具有破坏作用)
被动攻击:对一个保密系统采取截获密文并对其进行分析和攻击。(对密文没有破坏作用)
密码体制:由明文空间、密文空间、密钥空间、加密算法和解密算法五部分构成
密码协议:也称安全协议,指以密码学为基础的消息交换的通信协议,目的是在网络环境中提供安全的服务
密码系统:指用于加密、解密的系统
柯克霍夫原则:数据的安全基于密钥而不是算法的保密。即系统的安全取决于密钥,对密钥保密,对算法公开。——现在密码学设计的基本原则。
二.密码分类
1.按时间分类:
古典密码:以字符为基本加密单元
现代密码:以信息块为基本加密单元
2.按保密内容算法分类:
受限制算法:算法的保密性基于保持算法的秘密,主要应用于军事领域,属于古典密码
基于密钥算法:算法的保密性基于对密钥的保密,属于现代密码
3.按密码体制分类:
对称密码:单钥密码或私钥密码,指加密密钥与解密密钥相同
非对称密码:双钥密码或公钥密码,指加密密钥与解密密钥不同,密钥分公钥、私钥
对称密码算法:单钥密码算法或私钥密码算法,指应用于对称密码的加密、解密算法
非对称密码算法:双钥密码算法或公钥密码算法,指对应于非对称密码的加密、解密算法
4.按明文处理方法:
分组密码:指加密时将要加密的内容分成固定长度的组,用同一密钥和算法对每一块加密,输出也是固定长度的密文。多用于网络加密。
流密码:也称序列密码。指加密时每次加密一位或者一个字节明文。
三.散列函数和数字签名
1.散列函数
用来验证数据的完整性。
特点:长度不受限制,哈希值容易计算,散列运算运程不可逆
散列函数相关的算法:
a.消息摘要算法MD5等
b.SHA——安全散列算法
c.MAC——消息认证码算法
2.数字签名
主要是针对以数字的形式存储的消息进行的处理。
四.OSI安全体系
OSI(Open System Interconnection开放式通信系统)
五.TCP/IP安全体系
六.java安全组成
1.JCA(Java Cryptography Architecture)
提供基本的加密框架,如消息摘要、数字签名
2.JCE(Java Cryptography Extension)
在JCA的基础上做了一些扩展,提供很多加密的算法,消息摘要、密钥管理的功能。如DES、AES、RSA算法通过JCE提供
3.JSSE(Java Secure Socket Extension)
提供基于SSL的加密功能,主要用于网络传输
4.JAAS(Java Authentication and Authentication Service)
提供了在JAVA平台上进行用户身份验证的功能
七.Java中如何使用第三方的加解密提供者
1.使用JDK以外的扩展包需要修改资源文件并增加相关的内容,这是使用JDK以外的扩展包的方式之一。
\jre\lib\security\java.security文件中有如下配置:
security.provider.1=sun.security.provider.Sun security.provider.2=com.sun.net.ssl.internal.ssl.Provider security.provider.3=com.sun.rsajca.Provider security.provider.4=com.sun.crypto.provider.SunJCE security.provider.5=sun.security.jgss.SunProvider security.provider.6=org.bouncycastle.jce.provider.BouncyCastleProvider
2.调用security的addProvider或insertProviderAt方法,把我们要用的Provider做为参数传入
八.Java相关安全的包、类
1.java.security
消息摘要
2.javax.crypto
安全消息摘要,消息认证(鉴别)码,这个为我们所有需要的加解密操作提供了接口和类,通过这个包里提供的类的操作,我们可以完整的实现一套加解密的算法及安全摘要的算法
3.java.net.ssl
安全套接字,常用类HttpsURLConnection、SSLContext
九.第三方java扩展
1.Bouncy Castle
两种支持方案:
a.配置
security.provider.1=sun.security.provider.Sun
b.调用
2.Commons codec
Apache的,能支持Base64、二进制、十六进制、字符集编码、Url编码/解码
十.实现Base64算法
package com.bijian.study; import java.io.IOException; import org.apache.commons.codec.binary.Base64; import sun.misc.BASE64Decoder; import sun.misc.BASE64Encoder; public class BJBase64 { private static String src = "bj security base64"; public static void main(String[] args) { jdkBase64(); commonsCodesBase64(); bouncyCastleBase64(); } //JDK Base64实现 public static void jdkBase64() { try { BASE64Encoder encoder = new BASE64Encoder(); String encode = encoder.encode(src.getBytes()); System.out.println("encode:" + encode); BASE64Decoder decoder = new BASE64Decoder(); System.out.println("decode:" + new String(decoder.decodeBuffer(encode))); }catch(IOException e) { e.printStackTrace(); } } //Commons Codec Base64实现 public static void commonsCodesBase64() { byte[] encodeBytes = Base64.encodeBase64(src.getBytes()); System.out.println("encode:" + new String(encodeBytes)); byte[] decodeBytes = Base64.decodeBase64(encodeBytes); System.out.println("decode:" + new String(decodeBytes)); } //Bouncy Castle Base64实现 public static void bouncyCastleBase64() { byte[] encodeBytes = org.bouncycastle.util.encoders.Base64.encode(src.getBytes()); System.out.println("encode:" + new String(encodeBytes)); byte[] decodeBytes = org.bouncycastle.util.encoders.Base64.decode(encodeBytes); System.out.println("decode:" + new String(decodeBytes)); } }应用场景:e-mail、密钥、证书文件。
产生背景:最开始邮件产生时,传输一些非ascii值在不同的网关、网络时会出现一些问题,所以就能传ascii的值,即产生BASE64的算法。
RFC 2045:是BASE64算法的规范。
衍生:Base16、Base32、Url Base64
Base64算法与加解密算法:Base64编码、解码方式可以充当加解密算法,但是因为它的算法的计算方式和表都是公开的,违反了柯克霍夫原则,很容易被破解掉。当然,也可以做一些方式,比如加一个short或在编码前参杂一些字符,做一下绕码,再BASE64会安全些。其实,BASE64就是用了一种替换的方式去实现的算法。
PS:解决eclipse中无法直接使用Base64Encoder的问题
使用Base64Encoder,却发现在Eclipse中无法找到该类,因为Base64Encoder并不属于JDK标准库范畴,但是又包含在了JDK中。
解决方法:在Eclipse导入%JAVA_HOME%\jre\lib目录下的rt.jar包即可。Project->Properties,选择Java Build Path设置项,再选择Libraries标签,Add External Jars添加%JAVA_HOME%\jre\lib\rt.jar就OK!
相关推荐
总之,Java提供了方便的`java.util.Base64`工具类来处理Base64编码和解码,使得在Java项目中实现Base64加密解密变得简单且高效。这个基础的加密解密机制虽然简单,但在很多场景下已经足够满足基本的数据保护需求。
下面我们将详细探讨如何在Java中实现Base64加密和解密: 1. **Base64编码**: 使用`java.util.Base64.Encoder`接口的`encodeToString()`方法可以将字节数组编码为Base64字符串。例如: ```java byte[] bytes = ...
`sun.misc.BASE64Encoder`和`sun.misc.BASE64Decoder`是Java早期提供的用于Base64编码和解码的类,但请注意,这些类不在标准Java API中,而是属于Sun Microsystems的内部实现,不推荐在新的项目中使用,因为它们可能...
Java Base64加密解密方法工具类
参照网上Base64 js加密解密写的java实现,网上没看到出现过,可能大神都不屑写这种小东东,只好自己写了。弄了好几天,总算弄好了。 因为是参照 js Base64写的java实现,所以代码可实现前台js,后台java的加密,...
在IT行业中,编码和解码是常见的...总之,Java提供了便捷的工具来实现PDF与BASE64之间的转换,这对于在网络上传输或存储PDF文件非常有用。在实际项目中,根据具体需求,可能还需要结合其他库和方法来完善整个处理流程。
在这个压缩包中,包含的资源可以帮助我们理解并实现SHA1、SHA、MD5、AES加密与解密,以及BASE64编码和解码。下面我们将详细探讨这些加密算法和它们在Java中的实现。 1. **SHA(Secure Hash Algorithm)**: SHA是一...
另外,`BASE64加密解密 方法.txt`很可能是详细介绍了如何在Java中实现BASE64加密解密的步骤和技术细节。 综上所述,BASE64加密解密在Java开发中是一个实用的技术,它允许开发者轻松地在二进制数据和ASCII字符串之间...
在Java中,实现Base64编码主要依赖于`java.util.Base64`这个类库。自Java 8开始,Java提供了内置的Base64支持,使得操作更为便捷。以下是一些关于Base64批量加密的关键知识点: 1. **Base64Encoder和Base64Decoder*...
本主题将深入探讨“Base64转码解密成明文”以及“Base64加密成Java密文”的过程,并介绍相关的Java实现。 首先,我们来看Base64解码。Base64编码的基本原理是将每3个字节的数据(24位)分成4组,每组6位,然后将这6...
java AES加密解密,使用 CBC 解密模式,EncryptByAes Aes加密 后 base64 再加 DecryptByAes Aes 解密,对 PKCS7 填充的数据进行反填充,对数据进行 PKCS7 填充 使用 CBC 解密模式, // aesDecrypt 解密 public ...
在Java中,我们可以使用内置的`java.util.Base64`类来进行Base64的加密和解密操作。 Base64加密(编码)的过程是这样的:首先,输入的数据被分为每三个字节一组,因为每个字节有8位,三个字节共有24位。Base64将这...
在给定的"java_base64加密解密实例"中,我们将探讨如何使用Apache Commons库进行Base64的加密和解密操作,并设置自定义密钥来增强安全性。 Apache Commons Codec库提供了Base64工具类,它包含了Base64编码和解码的...
在Java中,我们可以使用内置的`java.util.Base64`类来实现BASE64的加密和解密操作。这个"BASE64加密源码完整JAR包"很可能包含了一个或者多个Java类,提供了方便的BASE64编码接口,便于开发者集成到他们的项目中。 ...
在这个特定的场景中,`jQuery` 被用来实现一种基于Base64的加密机制,以确保在客户端和服务器之间传输的数据不被轻易破解。`Base64`是一种简单的编码方式,它将二进制数据转化为可打印的ASCII字符,通常用于在网络上...
总的来说,这个压缩包提供的RSA加密解密Java实现,结合了Base64编码,提供了一种安全地传输和存储敏感信息的方法。在实际应用中,还需要考虑其他因素,如密钥的管理、安全性策略以及错误处理等。
Java 实现 Base64 加密是信息安全领域的一个基础操作,Base64 是一种简单的编码方式,常用于将二进制数据转化为可打印的 ASCII 字符串,以便在网络上传输或存储。在 Java 中,Base64 编码可以通过 `java.util.Base64...
在Java中,`java.util.Base64`类提供了便捷的接口来实现BASE64编码和解码。以下是如何使用BASE64对文件进行加密和解密的示例: ```java import java.nio.file.Files; import java.nio.file.Paths; import java.util...
在Java中实现Base64编码,我们可以使用内置的`java.util.Base64`类,这个类提供了方便的方法来进行Base64的编码和解码。 Base64编码的原理是将每3个字节(24位)的数据分为4组,每组6位。由于ASCII码是7位的,因此6...