MST

星途 面试题库

面试题:消息队列之RocketMQ如何实现基础的消息加密

在RocketMQ中,阐述如何实现对消息内容进行基础加密的常见方式,包括但不限于加密算法的选择以及在消息发送和接收端的具体操作步骤。
24.5万 热度难度
后端开发消息队列

知识考点

AI 面试

面试题答案

一键面试

加密算法选择

  1. 对称加密算法:如AES(高级加密标准),具有加密和解密速度快的优点,适合大量数据加密。其密钥管理相对简单,但发送方和接收方需共享相同密钥。
  2. 非对称加密算法:例如RSA,安全性高,无需共享私钥,但加解密速度较慢,常用于对少量数据(如对称加密算法的密钥)进行加密。

消息发送端具体操作步骤

  1. 选择加密算法:确定使用对称加密(如AES)或非对称加密(如RSA)。
  2. 生成密钥
    • 若使用对称加密,生成一个安全的对称密钥。例如在Java中用KeyGenerator生成AES密钥:
KeyGenerator keyGen = KeyGenerator.getInstance("AES");
keyGen.init(128);
SecretKey secretKey = keyGen.generateKey();
- 若使用非对称加密,生成公钥和私钥对。在Java中用`KeyPairGenerator`生成RSA密钥对:
KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("RSA");
keyPairGenerator.initialize(2048);
KeyPair keyPair = keyPairGenerator.generateKeyPair();
PublicKey publicKey = keyPair.getPublic();
PrivateKey privateKey = keyPair.getPrivate();
  1. 加密消息内容
    • 对称加密:用生成的对称密钥加密消息。如使用AES加密消息:
Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
cipher.init(Cipher.ENCRYPT_MODE, secretKey);
byte[] encryptedMessage = cipher.doFinal(message.getBytes());
- 非对称加密:使用接收方的公钥加密消息。如使用RSA加密:
Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding");
cipher.init(Cipher.ENCRYPT_MODE, publicKey);
byte[] encryptedMessage = cipher.doFinal(message.getBytes());
  1. 发送加密后的消息:将加密后的消息发送到RocketMQ,通过Message对象设置消息体为加密后的字节数组:
Message rocketMQMessage = new Message(topic, tags, encryptedMessage);
SendResult sendResult = producer.send(rocketMQMessage);

消息接收端具体操作步骤

  1. 获取密钥
    • 对称加密:接收方需要提前共享与发送方相同的对称密钥。
    • 非对称加密:接收方使用自己的私钥进行解密。
  2. 解密消息内容
    • 对称加密:用共享的对称密钥解密消息。如使用AES解密:
Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
cipher.init(Cipher.DECRYPT_MODE, secretKey);
byte[] decryptedMessage = cipher.doFinal(encryptedMessage);
String originalMessage = new String(decryptedMessage);
- 非对称加密:使用自己的私钥解密消息。如使用RSA解密:
Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding");
cipher.init(Cipher.DECRYPT_MODE, privateKey);
byte[] decryptedMessage = cipher.doFinal(encryptedMessage);
String originalMessage = new String(decryptedMessage);
  1. 处理解密后的消息:对解密后的原始消息进行业务逻辑处理。