Android经典实战之常见的移动端加密算法和用kotlin进行AES-256加密和解密

本文涉及的产品
密钥管理服务KMS,1000个密钥,100个凭据,1个月
简介: 本文介绍了移动端开发中常用的数据加密算法,包括对称加密(如 AES 和 DES)、非对称加密(如 RSA)、散列算法(如 SHA-256 和 MD5)及消息认证码(如 HMAC)。重点展示了如何使用 Kotlin 实现 AES-256 的加密和解密,提供了详细的代码示例。

本文首发于公众号“AntDream”,欢迎微信搜索“AntDream”或扫描文章底部二维码关注,和我一起每天进步一点点

在移动端开发中,数据加密是确保数据传输和存储安全的重要手段。常见的加密算法包括对称加密算法(如 AES)、非对称加密算法(如 RSA)、散列算法(如 SHA-256),以及消息认证码(如 HMAC)。

常见的移动端加密算法

  1. 对称加密算法(Symmetric Encryption)

    • AES(Advanced Encryption Standard):AES 是目前较为流行的对称加密算法,支持密钥长度为 128 位、192 位或 256 位。对称加密的特点是加密和解密使用同一个密钥。
    • DES(Data Encryption Standard):是一种较老的对称加密算法,因其密钥长度较短(56 位)而不再推荐使用。
  2. 非对称加密算法(Asymmetric Encryption)

    • RSA:RSA 是一种广泛使用的非对称加密算法,使用一对公钥和私钥进行加密和解密。非对称加密的特点是加密和解密使用不同的密钥,适合于密钥交换和数字签名。
  3. 散列算法(Hash Algorithms)

    • SHA-256(Secure Hash Algorithm 256-bit):一种常用的散列算法,将输入的数据生成固定长度的散列值,用于数据完整性校验和数字签名。
    • MD5(Message Digest Algorithm 5):较老的散列算法,已被发现存在安全漏洞,不再推荐使用。
  4. 消息认证码(Message Authentication Codes, MACs)

    • HMAC(Hash-based Message Authentication Code):结合了散列算法和密钥的消息认证码,用于确保数据的完整性和真实性。

使用 Kotlin 进行 AES-256 加密和解密

我们将介绍如何使用 Kotlin 实现 AES-256 加密和解密。以下是所需的步骤:

  1. 生成密钥
  2. 加密数据
  3. 解密数据

工具和库

在 Kotlin 中,我们通常使用 Java 提供的加密库 javax.crypto 来实现这些功能。

代码示例

  1. 依赖导入

确保你的项目中已经导入了必要的依赖:

dependencies {
   
    implementation("org.jetbrains.kotlin:kotlin-stdlib")
}
  1. 密钥生成

AES-256 需要 256 位(32 字节)的密钥。你可以生成一个随机密钥,或者使用一个固定的密钥(不推荐)。

import javax.crypto.KeyGenerator
import javax.crypto.SecretKey

fun generateAESKey(): SecretKey {
    val keyGen = KeyGenerator.getInstance("AES")
    keyGen.init(256) // 使用 256 位
    return keyGen.generateKey()
}
  1. 加密和解密
import java.util.Base64
import javax.crypto.Cipher
import javax.crypto.SecretKey
import javax.crypto.spec.GCMParameterSpec

private const val AES_ALGORITHM = "AES/GCM/NoPadding"
private const val TAG_LENGTH_BIT = 128
private const val IV_LENGTH_BYTE = 12

fun encrypt(data: String, secretKey: SecretKey): String {
    val cipher = Cipher.getInstance(AES_ALGORITHM)
    val iv = ByteArray(IV_LENGTH_BYTE)
    java.security.SecureRandom().nextBytes(iv)
    val parameterSpec = GCMParameterSpec(TAG_LENGTH_BIT, iv)
    cipher.init(Cipher.ENCRYPT_MODE, secretKey, parameterSpec)
    val encryptedData = cipher.doFinal(data.toByteArray())
    val encryptedIvAndData = ByteArray(iv.size + encryptedData.size)
    System.arraycopy(iv, 0, encryptedIvAndData, 0, iv.size)
    System.arraycopy(encryptedData, 0, encryptedIvAndData, iv.size, encryptedData.size)
    return Base64.getEncoder().encodeToString(encryptedIvAndData)
}

fun decrypt(encryptedData: String, secretKey: SecretKey): String {
    val cipher = Cipher.getInstance(AES_ALGORITHM)
    val encryptedIvAndData = Base64.getDecoder().decode(encryptedData)
    val iv = ByteArray(IV_LENGTH_BYTE)
    System.arraycopy(encryptedIvAndData, 0, iv, 0, iv.size)
    val parameterSpec = GCMParameterSpec(TAG_LENGTH_BIT, iv)
    cipher.init(Cipher.DECRYPT_MODE, secretKey, parameterSpec)
    val originalData = cipher.doFinal(encryptedIvAndData, iv.size, encryptedIvAndData.size - iv.size)
    return String(originalData)
}
  1. 测试加密和解密
fun main() {
    val secretKey = generateAESKey()
    val originalText = "Hello, World!"

    println("Original Text: $originalText")

    val encryptedText = encrypt(originalText, secretKey)
    println("Encrypted Text: $encryptedText")

    val decryptedText = decrypt(encryptedText, secretKey)
    println("Decrypted Text: $decryptedText")
}

代码解释

1、 生成密钥
使用 KeyGenerator 类生成一个 256 位的 AES 密钥。

2、 加密数据

  • 使用 AES/GCM/NoPadding 模式。
  • 生成一个随机的初始化向量(IV)。
  • 使用 IV 和密钥来初始化 Cipher 实例。
  • 执行加密操作并返回 Base64 编码的加密结果。

3、 解密数据

  • 使用 AES/GCM/NoPadding 模式。
  • 从加密数据中提取 IV。
  • 使用 IV 和密钥来初始化 Cipher 实例。
  • 执行解密操作并返回解密后的原始数据。

这样你就能够在 Kotlin 项目中使用 AES-256 实现数据的安全加密和解密。请注意,使用固定密钥不安全,建议使用安全的密钥管理机制来保护密钥。


欢迎关注我的公众号AntDream查看更多精彩文章!

目录
相关文章
|
2天前
|
存储 安全 数据安全/隐私保护
安全升级!Python AES加密实战,为你的代码加上一层神秘保护罩
【9月更文挑战第12天】在软件开发中,数据安全至关重要。本文将深入探讨如何使用Python中的AES加密技术保护代码免受非法访问和篡改。AES(高级加密标准)因其高效性和灵活性,已成为全球最广泛使用的对称加密算法之一。通过实战演练,我们将展示如何利用pycryptodome库实现AES加密,包括生成密钥、初始化向量(IV)、加密和解密文本数据等步骤。此外,还将介绍密钥管理和IV随机性等安全注意事项。通过本文的学习,你将掌握使用AES加密保护敏感数据的方法,为代码增添坚实的安全屏障。
15 8
|
4天前
|
安全 Android开发 开发者
探索安卓开发的未来:Kotlin的崛起与Flutter的挑战
在移动开发的广阔天地中,安卓平台始终占据着举足轻重的地位。随着技术的不断进步和开发者需求的多样化,Kotlin和Flutter成为了改变游戏规则的新玩家。本文将深入探讨Kotlin如何以其现代化的特性赢得开发者的青睐,以及Flutter凭借跨平台的能力如何挑战传统的安卓开发模式。通过实际案例分析,我们将揭示这两种技术如何塑造未来的安卓应用开发。
23 6
|
5天前
|
安全 Java Android开发
探索安卓应用开发的新趋势:Kotlin和Jetpack Compose
在安卓应用开发领域,随着技术的不断进步,新的编程语言和框架层出不穷。Kotlin作为一种现代的编程语言,因其简洁性和高效性正逐渐取代Java成为安卓开发的首选语言。同时,Jetpack Compose作为一个新的UI工具包,提供了一种声明式的UI设计方法,使得界面编写更加直观和灵活。本文将深入探讨Kotlin和Jetpack Compose的特点、优势以及如何结合使用它们来构建现代化的安卓应用。
15 4
|
8天前
|
自然语言处理 Java 网络架构
解锁跨平台微服务新纪元:Micronaut与Kotlin联袂打造的多语言兼容服务——代码、教程、实战一次打包奉送!
【9月更文挑战第6天】Micronaut是一款轻量级、高性能的Java框架,适用于微服务开发。它支持Java、Groovy和Kotlin等多种语言,提供灵活的多语言开发环境。本文通过创建一个简单的多语言兼容服务,展示如何使用Micronaut及其注解驱动特性实现REST接口,并引入国际化支持。无论是个人项目还是企业应用,Micronaut都能提供高效、一致的开发体验,成为跨平台开发的利器。通过简单的配置和代码编写,即可实现多语言支持,展现其强大的跨平台优势。
22 2
|
15天前
|
运维 安全 应用服务中间件
自动化运维的利器:Ansible入门与实战网络安全与信息安全:关于网络安全漏洞、加密技术、安全意识等方面的知识分享
【8月更文挑战第30天】在当今快速发展的IT时代,自动化运维已成为提升效率、减少错误的关键。本文将介绍Ansible,一种流行的自动化运维工具,通过简单易懂的语言和实际案例,带领读者从零开始掌握Ansible的使用。我们将一起探索如何利用Ansible简化日常的运维任务,实现快速部署和管理服务器,以及如何处理常见问题。无论你是运维新手还是希望提高工作效率的资深人士,这篇文章都将为你开启自动化运维的新篇章。
|
16天前
|
算法 安全 数据安全/隐私保护
Android经典实战之常见的移动端加密算法和用kotlin进行AES-256加密和解密
本文介绍了移动端开发中常用的数据加密算法,包括对称加密(如 AES 和 DES)、非对称加密(如 RSA)、散列算法(如 SHA-256 和 MD5)及消息认证码(如 HMAC)。重点讲解了如何使用 Kotlin 实现 AES-256 的加密和解密,并提供了详细的代码示例。通过生成密钥、加密和解密数据等步骤,展示了如何在 Kotlin 项目中实现数据的安全加密。
55 1
|
16天前
|
机器学习/深度学习 存储 算法
强化学习实战:基于 PyTorch 的环境搭建与算法实现
【8月更文第29天】强化学习是机器学习的一个重要分支,它让智能体通过与环境交互来学习策略,以最大化长期奖励。本文将介绍如何使用PyTorch实现两种经典的强化学习算法——Deep Q-Network (DQN) 和 Actor-Critic Algorithm with Asynchronous Advantage (A3C)。我们将从环境搭建开始,逐步实现算法的核心部分,并给出完整的代码示例。
36 1
|
4天前
|
调度 Android开发 开发者
探索安卓开发中的新技术:Kotlin协程
【9月更文挑战第9天】本文将深入探讨Kotlin协程在安卓开发中的应用,揭示其如何优雅地处理异步任务。我们将从基础概念入手,逐步深入到实际开发场景,最后通过代码示例直观展示协程的魔力。无论你是初学者还是有经验的开发者,这篇文章都将为你打开一扇通往更高效、更简洁代码的大门。
|
11天前
|
SQL 安全 网络安全
网络安全之盾:漏洞防御与加密技术的实战应用
【9月更文挑战第2天】在数字时代的浪潮中,网络安全成为保护个人隐私和企业资产的坚固盾牌。本文深入探讨了网络安全的两个核心要素:防御漏洞和加密技术。我们将从基础概念入手,逐步剖析常见的网络攻击手段,并分享如何通过实践加强安全意识。同时,提供代码示例以增强理解,旨在为读者构建一道坚不可摧的网络安全防线。
|
14天前
|
安全 开发者 数据安全/隐私保护
Xamarin 的安全性考虑与最佳实践:从数据加密到网络防护,全面解析构建安全移动应用的六大核心技术要点与实战代码示例
【8月更文挑战第31天】Xamarin 的安全性考虑与最佳实践对于构建安全可靠的跨平台移动应用至关重要。本文探讨了 Xamarin 开发中的关键安全因素,如数据加密、网络通信安全、权限管理等,并提供了 AES 加密算法的代码示例。
26 0