安全算法主要包括 摘要算法、对称加密算法、非对称加密算法、信息编码以及数字签名、数字证书。
1.数字摘要
数字摘要也称为消息摘要,它是一个唯一对应一个消息或文本的固定长度的值,由一个单向Hash函数对消息进行计算而产生的。其生产过程如下图所示:
有如下特点:
(1)无论输入的消息有多长,计算出来的消息摘要的长度是固定的。应用MD5,计算出长度是128个比特位,使用SHA-1算法计算出来是160个比特位;
(2)只能进行正向的信息摘要,而无法从摘要中恢复出原来的消息。
常用的算法:
MD5及SHA算法。
java例子:
public class DigestTest { public static byte[] testMD5(String content) throws Exception { MessageDigest md = MessageDigest.getInstance("MD5"); byte[] bytes = md.digest(content.getBytes("UTF-8")); return bytes; } public static byte[] testSHA1(String content) throws Exception { MessageDigest md = MessageDigest.getInstance("SHA1"); byte[] bytes = md.digest(content.getBytes("UTF-8")); return bytes; } public static void main(String args[]) throws Exception { String content = "123"; byte[] bytes = testMD5(content); String digest = DatatypeConverter.printHexBinary(bytes); System.out.println(digest); bytes = testSHA1(content); digest = DatatypeConverter.printHexBinary(bytes); System.out.println(digest); } }
2.对称加密算法
在对称加密算法中,数据发送方将明文和加密密钥经过特殊加密算法处理后,生成复杂的加密密文进行发送,数据接收方收到密文后,必须用相同的算法及密钥时行解密。其过程如下:
特点是算法公开、计算量小、加密速度快,加密效率高。
常用的加密算法包括:DES算法、3DES算法、AES算法。
Java例子:
AES对称算法加密:(用DES算法,只需要把AES改成DES即可)
public class AESTest { public static String genKeyAES() throws Exception { KeyGenerator keyGenerator = KeyGenerator.getInstance("AES"); keyGenerator.init(128); SecretKey key = keyGenerator.generateKey(); String base64Key = DatatypeConverter.printBase64Binary(key.getEncoded()); return base64Key; } public static SecretKey loadKeyAES(String base64Key){ byte[] bytes = DatatypeConverter.parseBase64Binary(base64Key); SecretKey key = new SecretKeySpec(bytes, "AES"); return key; } public static byte[] encryptDES(byte[] source, SecretKey key) throws Exception { Cipher ciper = Cipher.getInstance("AES"); ciper.init(Cipher.ENCRYPT_MODE, key); byte[] bytes = ciper.doFinal(source); return bytes; } public static byte[] decrytDES(byte[] source, SecretKey key) throws Exception{ Cipher ciper = Cipher.getInstance("AES"); ciper.init(Cipher.DECRYPT_MODE, key); byte[] bytes = ciper.doFinal(source); return bytes; } public static void main(String args[]) throws Exception { String test = "1234"; String content = genKeyAES();//"12345678901234567890123456789012"; System.out.println(content); SecretKey secretKey = loadKeyAES(content); byte bytes[] = encryptDES(test.getBytes(), secretKey); System.out.println("secretKey String:" + DatatypeConverter.printHexBinary(bytes)); bytes = decrytDES (bytes, secretKey); System.out.println("decrytDES String:" + new String(bytes)); } }
3.非对称加密算法
又称为公开密钥加密算法,需要两个密钥,一个是公开密钥(public key),一个是私有密钥(private key),公钥和私钥需要配对使用。
基本过程:甲方生成一对密钥,并将其中的一把作为公钥向其他人公开,得到该公钥的乙方使用该密钥对机密信息进行加密后再发送给甲方,甲方再使用自己保存的另一把密钥(即私钥)对加密后的信息进行解密。如下图所示:
常用的算法:RSA算法
JAVA的例子:
public class RSATest { public static KeyPair getKeyPairt() throws Exception { KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("RSA"); keyPairGenerator.initialize(512); return keyPairGenerator.generateKeyPair(); } public static String getPublicKey(KeyPair keyPair){ PublicKey publicKey = keyPair.getPublic(); byte[] bytes = publicKey.getEncoded(); return DatatypeConverter.printBase64Binary(bytes); } public static String getPrivateKey(KeyPair keyPair){ PrivateKey privateKey = keyPair.getPrivate(); byte[] bytes = privateKey.getEncoded(); return DatatypeConverter.printBase64Binary(bytes); } public static PublicKey String2Publickey(String pubStr) throws Exception { byte[] bytes = DatatypeConverter.parseBase64Binary(pubStr); X509EncodedKeySpec keySpec = new X509EncodedKeySpec(bytes); KeyFactory keyFactory = KeyFactory.getInstance("RSA"); PublicKey publicKey = keyFactory.generatePublic(keySpec); return publicKey; } public static PrivateKey String2Privatekey(String privateStr) throws Exception { byte[] bytes = DatatypeConverter.parseBase64Binary(privateStr); PKCS8EncodedKeySpec keySpec = new PKCS8EncodedKeySpec(bytes); KeyFactory keyFactory = KeyFactory.getInstance("RSA"); PrivateKey privatekey = keyFactory.generatePrivate(keySpec); return privatekey; } public static byte[] publicEncrypt(byte[] content, PublicKey publicKey) throws Exception { Cipher cipher = Cipher.getInstance("RSA"); cipher.init(Cipher.ENCRYPT_MODE, publicKey); return cipher.doFinal(content); } public static byte[] privateEncrypt(byte[] content, PrivateKey privatekey) throws Exception { Cipher cipher = Cipher.getInstance("RSA"); cipher.init(Cipher.ENCRYPT_MODE, privatekey); return cipher.doFinal(content); } public static byte[] publicDecrypt(byte[] content, PublicKey publicKey) throws Exception { Cipher cipher = Cipher.getInstance("RSA"); cipher.init(Cipher.DECRYPT_MODE, publicKey); return cipher.doFinal(content); } public static byte[] privateDecrypt(byte[] content, PrivateKey privatekey) throws Exception { Cipher cipher = Cipher.getInstance("RSA"); cipher.init(Cipher.DECRYPT_MODE, privatekey); return cipher.doFinal(content); } public static void main(String[] args) throws Exception { String str = "Hello, I am lai xiao hong"; byte[] bytes = str.getBytes(); KeyPair keyPair = getKeyPairt(); String publicKey = getPublicKey(keyPair); String privateKey = getPrivateKey(keyPair); System.out.println("publicKey:" + publicKey); System.out.println("privateKey:" + privateKey); //byte[] encBytes = publicEncrypt(bytes, String2Publickey(publicKey)); //byte[] decBytes = privateDecrypt(encBytes,String2Privatekey(privateKey)); byte[] encBytes = privateEncrypt(bytes, String2Privatekey(privateKey)); byte[] decBytes = publicDecrypt(encBytes, String2Publickey(publicKey)); System.out.println("Decrypt String:" + new String(decBytes)); } }
4.数字签名
签名认证是对非对称加密技术和数字摘要技术的综合运用,指的是将通信内容的商要信息使用发送者的私钥进行加密,然后将密文与原文一起传输给信息的接收者,接收者通过发送者的公钥解密被加密的摘要信息,然后使用与发送者相同的摘要算法,对接收的内容采用相同的方式产生摘要串,与解密的摘要串进行对比,如果相同,则说明接收到的内容是完整的,在传输过程中没有受到第五方篡改,否则说明通信内容已被第三方修改。
只有信息的发送者才能产生别人无法篡改的数字签名串,这个串能对信息发送者所发送的内容完整 性和发送者的身份进行校验和签别,通信正文经过相应的摘要算法生成摘要后,使用消息发送者的私钥进行加密,生成数字签名如下图所示:
消息的接收端收到信息的正文和对应的数字签名后,使用与发送端相同的摘要算法,生成通信正文的摘要,并且使用发送者的公钥对数字签名进行解密,得到发送商生成的摘要,进行比较后即可验证发送者的身份是否合法,正文内容是否被篡改,如下图所示:
常风的数字数字签名算法包括:MD%withRSA、SHA1withRSA等.
java 例子:
public class SignatureTest { private static byte[] sign(byte[] content, PrivateKey privateKey) throws Exception { Signature signature = Signature.getInstance("MD5withRSA"); signature.initSign(privateKey); signature.update(content); return signature.sign(); } private static boolean verify(byte[] content,byte[] sign, PublicKey publicKey) throws Exception{ Signature signature = Signature.getInstance("MD5withRSA"); signature.initVerify(publicKey); signature.update(content); return signature.verify(sign); } }
5.数字证书
也称为电子证书,通常包含如下内容:
- 对象的名称
- 证书的过期时间
- 颁发机构
- 签名算法
- 对象的公钥
大多数证书采用X.509的格式来保存证书,数字证书的签发过程实际上就是对数字证书的内容,包括证书所代表对象的公钥进行数字签名,而验证证书的过程,实际上是检验证书的数字签名。
在现实中,网络用户的数字证书需要数字认证机构(Certificate Authority,CA)来进行颁发,只有经过CA颁布的数字证书在网络中才具备认证性。
证书的生成过程如下:
证书的验证过程如下:
要获得数字证书,首先需要使用数字证书管理工具,如keytool,OpenSSL等,然后构建CSR(Certificate Signing Request)数字证书签发申请,提交给数字证书认证机构进行签名,最终形成数字证书。
相关推荐
Java中常用的根查找算法有二分法、牛顿-拉弗森方法和Bisection法。Apache Commons Math提供了这些方法的实现。 九、排序与搜索算法 数值算法也涵盖了排序和搜索算法,如快速排序、归并排序、二分查找等。这些算法...
Java中的加密算法在信息安全领域扮演着重要角色,用于保护数据的隐私性和完整性。本文将详细介绍在Java中常见的三种加密算法:MD5、SHA以及RSA,并探讨它们的应用场景和实现方式。 1. MD5(Message-Digest ...
本篇文章将详细讨论几种常见的哈希算法及其在Java中的实现。 1. **MD5(Message-Digest Algorithm 5)** MD5是一种广泛使用的哈希函数,产生128位(16字节)的哈希值,通常表示为32个十六进制数字。尽管MD5在安全...
8. **常用算法**:除了上述数据结构,面试还会涉及排序、查找、图论、动态规划、贪心算法等经典算法。例如,快速排序、归并排序、二分查找、KMP字符串匹配、最小生成树(Prim或Kruskal)、最短路径(Dijkstra或...
- **类与对象**:在Java中,可以创建类来封装算法,通过对象的方法来执行算法操作,这样代码更具有可读性和可维护性。 - **泛型**:Java的泛型允许我们在编写代码时指定容器(如List、Set、Map等)所容纳的对象...
Java 中常用的加密算法 MD5,SHA,RSA Java 中常用的加密算法有多种,包括 MD5、SHA 和 RSA 等,这些算法在不同的应用场景中发挥着重要作用。下面将对这些算法进行详细的介绍和分析。 一、MD5 加密算法 MD5...
### Java常用几种加密算法 在Java开发中,数据的...以上就是关于Java中常用的几种加密算法——MD5、SHA及RSA的基本介绍和应用示例。通过理解这些加密算法的工作原理和应用场景,可以帮助开发者更好地保护数据安全。
本文将深入探讨Java中常用的两种加密算法:对称加密和非对称加密,并特别关注DE和RSA这两种算法。 首先,我们来看对称加密。对称加密是最基础的加密方式,其特点是加密和解密使用同一密钥。在Java中,DES(Data ...
本文将详细介绍Java中常见的加密算法的实现,以及如何在JDK 1.8环境下进行操作。 1. **对称加密算法** 对称加密是最基础的加密方式,使用相同的密钥进行加密和解密。Java中提供了`javax.crypto`包来支持此类算法,...
2. 在Java中实现对称加密算法,需要掌握如何使用Java加密扩展(Java Cryptography Extension, JCE),这是一套加密算法API,可以方便地在Java程序中集成加密功能。 对DES算法而言,它是一个对称密钥的块加密算法,...
在Java中,上述提到的加密算法都可以通过java.security包以及javax.crypto包中的相关类来实现。开发者在使用这些类时,需要考虑算法的适用场景以及安全性因素,合理选择对称或非对称加密算法,以及选择哪种加密强度...
这个压缩包文件"Java中常用的加密算法RSA.doc"可能包含更详细的内容,如具体的代码示例、原理解释或应用场景分析。对于学习和理解Java中的RSA加密算法,阅读这份文档会是一个很好的资源。无论你是初学者还是有经验的...
本篇文章将详细介绍Java中常用的加密算法及其实现原理。我们将首先介绍对称加密算法,包括DES、AES和RC4。然后,我们将介绍非对称加密算法,包括RSA和DSA。继而,我们将介绍散列算法,包括MD5和SHA,最后,我们将...
在Java中,数组可以是一维、二维或多维的。理解数组的索引、遍历以及如何在数组中搜索和排序元素是基础。 2. **链表**:链表由节点组成,每个节点包含数据和指向下一个节点的引用。与数组相比,链表插入和删除操作...
以上就是Java中常见的排序算法实现,每种算法都有其适用场景和优缺点。了解和掌握这些算法,能够帮助开发者在实际工作中根据需求选择合适的排序方法,提高程序性能。在实际项目中,还需要考虑算法的时间复杂度、空间...
在Java中,`java.security.MessageDigest`类可以用来实现MD5计算。通过创建MD5实例,更新输入数据,然后获取哈希值,可以实现对数据的不可逆加密,常用于密码存储或文件校验。 其次,DES(Data Encryption Standard...
在Java中,我们可以使用多种加密算法来实现数据的安全传输和存储。以下将详细介绍几种常见的Java加密算法及其工作原理。 1. **对称加密算法** 对称加密算法使用相同的密钥进行加密和解密,速度快,效率高,适合...
`JAVA上加密算法的实现用例`这个主题涵盖了Java中加密算法的基本概念、常用的加密库以及具体的代码示例。 首先,Java提供了一个内置的加密库,名为Java Cryptography Extension (JCE),它允许开发者使用各种加密...
在Java中,可以结合HTTP、HTTPS等协议,以及JSON、XML等数据格式,配合加密算法实现安全的数据同步。 5. **学习杂记**:学习加密算法不仅需要理解算法原理,还要熟悉Java提供的加密API。实践是提升技能的关键,通过...
在Java中,常用算法包括排序(冒泡排序、选择排序、插入排序、快速排序、归并排序等)、查找(线性查找、二分查找)、图遍历(深度优先搜索、广度优先搜索)等。这些算法的效率通常用时间复杂度和空间复杂度来衡量,...