对称加密、非对称加密与MD5原理详解

本文详细介绍了Android中Notification的创建及使用方法,包括不同版本的兼容性问题、Builder类的使用技巧等。同时深入探讨了Android广播机制,包括其工作原理、生命周期管理、广播接收器的注册方式等内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、对称加密原理

1. 核心特点

  • 单一密钥:加密解密使用相同密钥

  • 高效快速:适合大数据量加密

  • 密钥分发:主要安全挑战

2. 典型算法:AES(高级加密标准)

加密过程

  1. 密钥扩展:将初始密钥扩展为多轮密钥

  2. 初始轮:AddRoundKey(密钥加)

  3. 主轮循环(10/12/14轮):

    • SubBytes(字节替换)

    • ShiftRows(行移位)

    • MixColumns(列混淆)

    • AddRoundKey

  4. 最终轮:省略MixColumns

示例代码

Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
SecretKeySpec key = new SecretKeySpec(keyBytes, "AES");
cipher.init(Cipher.ENCRYPT_MODE, key);
byte[] iv = cipher.getIV(); // 初始化向量
byte[] ciphertext = cipher.doFinal(plaintext.getBytes());

二、非对称加密原理

1. 核心特点

  • 密钥对:公钥加密,私钥解密

  • 数学难题:基于大数分解(RSA)或离散对数(ECC)

  • 速度较慢:适合小数据量加密

2. 典型算法:RSA

密钥生成

  1. 选择两个大素数p和q(1024位以上)

  2. 计算n = p * q

  3. 计算φ(n) = (p-1)(q-1)

  4. 选择e(通常65537),满足1 < e < φ(n)且gcd(e, φ(n)) = 1

  5. 计算d ≡ e⁻¹ mod φ(n)

加密公式

  • 加密:c ≡ mᵉ mod n

  • 解密:m ≡ cᵈ mod n

示例代码

KeyPairGenerator kpg = KeyPairGenerator.getInstance("RSA");
kpg.initialize(2048);
KeyPair kp = kpg.generateKeyPair();

Cipher cipher = Cipher.getInstance("RSA/ECB/OAEPWithSHA-256AndMGF1Padding");
cipher.init(Cipher.ENCRYPT_MODE, kp.getPublic());
byte[] ciphertext = cipher.doFinal(plaintext.getBytes());

三、MD5原理(消息摘要算法)

1. 核心特点

  • 哈希函数:将任意长度输入→固定长度输出(128位)

  • 不可逆:无法从哈希值恢复原文

  • 抗碰撞性:已不满足安全要求(已被破解)

2. 算法流程

  1. 填充消息

    • 添加比特"1"

    • 填充0直到长度≡448 mod 512

    • 追加64位原始消息长度

  2. 初始化变量

    A = 0x67452301
    B = 0xEFCDAB89
    C = 0x98BADCFE
    D = 0x10325476
  3. 主循环处理(512位分组):

    • 每轮16步,共4轮(64步)

    • 使用非线性函数(F,G,H,I)

    • 每步包含:

      • 模加

      • 循环左移

      • 常量加法

  4. 输出哈希值:A,B,C,D的级联

3. 安全缺陷

  • 碰撞攻击:可在2¹⁸次操作内找到碰撞

  • 实际案例

    • 不同证书生成相同MD5

    • 构造恶意文件与正常文件同哈希

4. 替代方案

  • 安全哈希:SHA-256, SHA-3

  • 密码学哈希:BLAKE3, Argon2(带盐)

四、对比总结

特性对称加密非对称加密MD5(哈希)
密钥机制单密钥密钥对无密钥
速度快(MB/s级)慢(KB/s级)快(GB/s级)
安全性基础混淆扩散数学难题哈希非线性
主要用途数据加密密钥交换/签名完整性校验
量子安全AES-256安全传统算法不安全已不安全

五、Java实现示例

1. 对称加密(AES)

// AES-GCM加密
Cipher cipher = Cipher.getInstance("AES/GCM/NoPadding");
GCMParameterSpec ivSpec = new GCMParameterSpec(128, iv); // 12字节IV
cipher.init(Cipher.ENCRYPT_MODE, key, ivSpec);
byte[] ciphertext = cipher.doFinal(plaintext.getBytes());

2. 非对称加密(RSA)

// RSA-OAEP加密
Cipher cipher = Cipher.getInstance("RSA/ECB/OAEPWithSHA-256AndMGF1Padding");
OAEPParameterSpec oaepParams = new OAEPParameterSpec(
    "SHA-256", "MGF1", MGF1ParameterSpec.SHA256, PSource.PSpecified.DEFAULT);
cipher.init(Cipher.ENCRYPT_MODE, publicKey, oaepParams);

3. 哈希计算(SHA-256替代MD5)

MessageDigest digest = MessageDigest.getInstance("SHA-256");
byte[] hash = digest.digest(message.getBytes());

六、安全建议

  1. 对称加密

    • 使用AES-256-GCM

    • 确保IV唯一性(GCM推荐12字节随机数)

    • 定期轮换密钥

  2. 非对称加密

    • RSA至少2048位(3072位更安全)

    • 优先选择ECC(如P-256曲线)

    • 使用OAEP填充而非PKCS#1 v1.5

  3. 哈希算法

    • 禁用MD5/SHA-1

    • 敏感场景加盐(salt)

    • 考虑使用HMAC进行密钥哈希

理解这些加密原理和哈希机制是构建安全系统的基石,开发者应根据具体场景选择适当算法并正确实现。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值