微服务架构 | 微服务有哪些常用的加密方式 (一)?

2021-10-27 15:01:14 浏览数 (1)

导读:数据加解密技术是网络中最基本的安全技术,主要是通过对网络中传输的信息进行数据加密来保障其安全性,这是一种主动安全防御策略,用很小的代价即可为信息提供相当大的安全保护通过数据加密技术,可以在一定程度上提高数据传输的安全性,保证传输数据的完整性。

一、背景


在保障信息安全各种功能特性的诸多技术中,密码技术是信息安全的核心和关键技术。通过数据加密技术,可以在一定程度上提高数据传输的安全性,保证传输数据的完整性。在数据加密系统中,密钥控制加密和解密过程,一个加密系统的全部安全性是基于密钥的,而不是基于算法,所以加密系统的密钥管理是一个非常重要的问题。

数据加密过程就是通过加密系统把原始的数字信息(明文),按照加密算法变换成与明文完全不同的数字信息(密文)的过程,如图所示。

二、加密方式


对称加密之DES加密与解密

对称加密,是一种比较传统的加密方式,其加密运算、解密运算使用的是同样的密钥,信息的发送者和信息的接收者在进行信息的传输与处理时,必须共同持有该密码(称为对称密码)。因此,通信双方都必须获得这把钥匙,并保持钥匙的秘密,如图:

加密

加密过程是通过Encoding指定不同的代码页,把字符转成不同代码页对应的编码,表现为byte[ ]

代码语言:javascript复制
/** 加密 */
public String encrypt(String encryptStr) {
    synchronized (this.encryptor) {
        try {
            encryptor.init(Cipher.ENCRYPT_MODE, secretKey);
            byte[] encodes = Base64.getEncoder().encode(encryptor.doFinal(encryptStr.getBytes(CHARSET_DEFAULT)));
            return HexUtils.toHexString(encodes);
        } catch (Exception e) {
            log.error(ENCRYPT_DES   "加密出错", e);
        }
    }
    return null;
}

解密

解密过程是加密时Encoding 使用的代码页,把byte[ ]形式的明文转为适当的字符串明文

代码语言:javascript复制
/** 解密 */
public String decrypt(String decryptStr) {
    synchronized (this.decryptor) {
        try {
            decryptor.init(Cipher.DECRYPT_MODE, secretKey);
            return new String(decryptor.doFinal(Base64.getDecoder().decode(HexUtils.fromHexString(decryptStr))), CHARSET_DEFAULT);
        } catch (Exception e) {
            log.error(ENCRYPT_DES   "解密出错", e);
        }
    }
    return null;
}
▐ 非对称加密之RSA加密与解密

RSA公钥加密算法是1977年由Ron Rivest、Adi Shamirh和LenAdleman在(美国麻省理工学院)开发的。RSA取名来自开发他们三者的名字。RSA是目前最有影响力的公钥加密算法,它能够抵抗到目前为止已知的所有密码攻击,已被ISO推荐为公钥数据加密标准。RSA算法基于一个十分简单的数论事实:将两个大素数相乘十分容易,但那时想要对其乘积进行因式分解却极其困难,因此可以将乘积公开作为加密密钥。RSA算法是第一个能同时用于加密和数字签名的算法,也易于理解和操作。

RSA是被研究得最广泛的公钥算法,从提出到现在已近二十年,经历了各种攻击的考验,逐渐为人们接受,普遍认为是目前最优秀的公钥方案之一。RSA的安全性依赖于大数的因子分解,但并没有从理论上证明破译RSA的难度与大数分解难度等价。即RSA的重大缺陷是无法从理论上把握它的保密性能如何,而且密码学界多数人士倾向于因子分解不是NPC问题。如下图:

加密

加密过程是通过Encoding指定不同的代码页,把字符转成不同代码页对应的编码,表现为byte[ ]

代码语言:javascript复制
/** 加密 */
public String encrypt(String encryptStr) {
    synchronized (this.encryptor) {
        try {
            encryptor.init(Cipher.ENCRYPT_MODE, secretKey, ivParam);
            byte[] encodes = Base64.getEncoder().encode(encryptor.doFinal(encryptStr.getBytes(CHARSET_DEFAULT)));
            return HexUtils.toHexString(encodes);
        } catch (Exception e) {
            log.error(ENCRYPT_AES   "加密出错", e);
        }
    }
    return null;
}

解密

解密过程是加密时Encoding 使用的代码页,把byte[ ]形式的明文转为适当的字符串明文

代码语言:javascript复制
/** 解密 */
public String decrypt(String decryptStr) {
    synchronized (this.decryptor) {
        try {
            decryptor.init(Cipher.DECRYPT_MODE, secretKey, ivParam);
            return new String(decryptor.doFinal(Base64.getDecoder().decode(HexUtils.fromHexString(decryptStr))), CHARSET_DEFAULT);
        } catch (Exception e) {
            log.error(ENCRYPT_AES   "解密出错", e);
        }
    }
    return null;
}

三、总结


加密类型可以简单地分为四种:

  • 根本不考虑解密问题;
  • 私用密钥加密技术:对称式加密(Symmetric Key Encryption):对称式加密方式对加密和解密使用相同的密钥。如:RC4、RC2、DES 和 AES 系列加密算法。
  • 公开密钥加密技术:非对称密钥加密(Asymmetric Key Encryption):非对称密钥加密使用一组公共/私人密钥系统,加密时使用一种密钥,解密时使用另一种密钥。公共密钥可以广泛的共享和透露。当需要用加密方式向服务器外部传送数据时,这种加密方式更方便。如:RSA
  • 数字证书。(Certificate):数字证书是一种非对称密钥加密,但是,一个组织可以使用证书并通过数字签名将一组公钥和私钥与其拥有者相关联。

本文主要阐述加密的两种方式对称式加密和非对对称式加密以及两者的实现方式,总结本篇文章希望对从事相关业务线的同学能够有所帮助或者启发

- END -

0 人点赞