加解密技术

加解密技术加密与解密 加解密

大家好,欢迎来到IT知识分享网。


前言

最近项目中需要保存用户数据,但是由于数据中不能进行明文保存,需要进行加密保存,所以针对加解密进行一些调研和学习。


一、为什么需要加密?

信息一般都具有一定的隐私性和排他性,需要防止被第三方或者非授权方获取。但信息从发送方到接受方可能会经过很多中间流程。除非发送方直接将信息直接告知接受方,否则在传递过程中信息存在被第三方获知的可能性。因此为了防止信息被窃取因此在传递和存储信息的时候需要对信息进行加密处理,将信息从明文转换成密文。

二、为什么需要解密?

三、加解密算法分类

四、单向加密算法

单向加密算法主要双方通过算法将消息计算成固定长度的摘要,通过摘要的对比来验证消息的一致性。HMAC通过引入密钥又解决了对消息来源方的身份认证问题。

1.MD5

import org.springframework.util.DigestUtils; import java.math.BigInteger; import java.nio.charset.StandardCharsets; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; public class Secret { 
      public static void main(String[] args) { 
      String soure=" this is a test source string"; byte[] secretBytes = null; try { 
      // 使用jdk自带的MessageDigest secretBytes = MessageDigest.getInstance("md5").digest(soure.getBytes(StandardCharsets.UTF_8)); } catch (NoSuchAlgorithmException e) { 
      e.printStackTrace(); } String md5code = new BigInteger(1, secretBytes).toString(16); for (int i = 0; i < 32 - md5code.length(); i++) { 
      md5code = "0" + md5code; } System.out.println(md5code); // 使用spring的DigestUtils System.out.println(DigestUtils.md5DigestAsHex(soure.getBytes())); } } 

2.SHA-1/SHA-256

import java.math.BigInteger; import java.nio.charset.StandardCharsets; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; public class Secret { 
      public static void main(String[] args) { 
      String soure=" this is a test source string a word is peace"; byte[] secretBytes = null; try { 
      // 使用jdk自带的MessageDigest secretBytes = MessageDigest.getInstance("SHA-1").digest(soure.getBytes(StandardCharsets.UTF_8)); } catch (NoSuchAlgorithmException e) { 
      e.printStackTrace(); } String shaCode = new BigInteger(1, secretBytes).toString(16); for (int i = 0; i < 32 - shaCode.length(); i++) { 
      shaCode = "0" + shaCode; } System.out.println(shaCode); } } 

3.HMAC

HAMC密钥相关的哈希运算消息认证码(Hash-based Message Authentication Code),是基于Hash函数和密钥进行消息认证的方法。相当于使用散列函数对消息进行操作后,又用发送方和接收方共享的认证的密钥进行再次操作。HMAC不仅能对消息完整性进行认证,还可以对发送方身份进行认证。


五、对称【双向】加密算法

采用单密钥用来加密和解密,常见的对称加密算法有DES、3DES、AES、RC4等。对称加密计算量小,速度快,适合对大量数据进行加解密的场景。由于采用加密和解密采用相同密钥,所以安全传递密钥到解密方就是关键。同时需要给每个用户分配单独的密钥,会导致密钥随用户线性增长。

1.DES/3DES算法

代码示例:

 String src=" this is a test source string"; String password="password"; try { 
       // 创建一个密匙工厂,然后用它把 DESKeySpec 转换成 SecretKey SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES"); DESKeySpec desKey = new DESKeySpec(password.getBytes()); SecretKey securekey = keyFactory.generateSecret(desKey); Cipher cipher = Cipher.getInstance("DES"); SecureRandom random = new SecureRandom(); cipher.init(Cipher.ENCRYPT_MODE, securekey, random); cipher.doFinal(src.getBytes(StandardCharsets.UTF_8)); } catch (Throwable e) { 
       e.printStackTrace(); } 

2.AES算法

AES高级加密标准、全称是Advanced Encryption Standard,AES加密算法安全性高于DES和3DES,是目前主要的对称加密算法。AES加密算法采用分组加密体制,每个分组数据长度位128位16个字节。一共有四种加密模式,分别是 ECB(电子密码本模式)、CBC(密码分组链接模式)、CFB、OFB,我们一般使用的是 CBC 模式。

3.RC4算法

RC4算法密钥长度可变,可变范围位1~256字节,当密钥长度位128bit时,可以抵御暴力激活成功教程。RC4不是对明文进行处理,而是采用字节流的方式依次加密明文中的每一个字节,解密的时候也是依次对密文中的每一个字节进行解密。


六、非对称【双向】加密算法


总结

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/113819.html

(0)
上一篇 2025-12-12 15:26
下一篇 2025-12-12 15:45

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信