AndroluaDocs AndroluaDocs
首页
文章
项目
资源
GitLab (opens new window)
首页
文章
项目
资源
GitLab (opens new window)
  • Lua

    • Lua初见
    • Lua语法学习
    • 数组
    • 函数&回调
  • 开发者素质基础
  • 安卓开发基础

    • 认识安卓开发
    • 认识activity
  • 制作第一个程序
  • 界面设计

    • 布局认知和Aly介绍
    • 布局表及控件认知
    • 自定义控件
    • 列表于相关实现
    • 布局动画相关
  • 数据处理

    • 各种格式的文件及解析方法
    • 正则表达式及lua字符串操作
    • 各种算法实现及数据安全
      • AES
        • 算法
        • 使用
    • 软件数据存取策略
    • 文件压缩移动等
  • 网络相关

    • 常用网络库的使用
    • Api对接实践
    • Okhttp&Jsoup库使用
  • 系统操作

    • 应用软件间通信
    • 应用与硬件的交互
  • 源码安全

    • 框架原生保护与原理
    • 常用加密原理与实践
  • 文章
  • 数据处理
可可
2022-04-15
目录

各种算法实现及数据安全

# 加密算法

先说说加密算法。 加密算法分为单向加密和双向加密。 单向加密包括MD5,SHA等摘要算法。单向加密算法是不可逆的,无法恢复加密后的数据,除非采取碰撞攻击和穷举的方式。单向加密一般用于“验证”的应用场景,比如密码存储等等。这样即使被攻击,攻击方也无法获取原始数据(除非碰撞)

双向加密是可逆的,持有密文的一方可以根据密钥解密得到原始明文,一般用于发送方和接收方都能通过密钥获取明文的情况。

双向加密包括对称加密和非对称加密。对称加密包括DES加密,AES加密等,非对称加密包括RSA加密,ECC加密。

# AES

Advanced Encryption Standard对称加密算法,是DES算法的替代者,是一种流行算法。

# 算法

对账号密码等重要关键的存储需要注意,加密至关重要,因此照着网络上Android的AES实例,在 Fusion App 中简单实现了一个数据存储的加密,不保证安全(毕竟微信的加密都能被破解) 不会数据存储的也可以直接使用,非常方便,不愿加密也可以用 activity.setSharedData(数据项名称,数据) 和 activity.getSharedData(数据项名称) 直接存取数据 只需要加解密功能,可以使用 encrypt(文本,密码) 进行加密,decrypt(文本,密码) 进行解密 加解密函数我嫌长,直接压缩成一行了,可读性较差 然后发现存取数据的函数更长(好多if),本来也应该缩短下,不过...就...懒得搞了 ————By: 32552732

AES支持三种长度的密钥:128位,192位,256位,这里给的是128位的算法(性能快,安全性较256低)


import"android.util.Base64"
import"javax.crypto.spec.SecretKeySpec"
import"javax.crypto.Cipher"
import"javax.crypto.spec.PBEKeySpec"
import"javax.crypto.SecretKeyFactory"
function encrypt(content,password)
  --数据加密 (By: 32552732)
  local jdpuk=Cipher.getInstance("AES") --创建生产者
  jdpuk.init(Cipher.ENCRYPT_MODE,SecretKeySpec(SecretKeyFactory.getInstance("PBKDF2WithHmacSHA1")
.generateSecret(PBEKeySpec(String(password).toCharArray(),byte[1],1,128)
).getEncoded()
,"AES"))--生产者初始化等等,一行完成
  return Base64.encodeToString(jdpuk.doFinal(String(content).getBytes("UTF-8"))
,Base64.NO_WRAP)--转换
,"By: 32552732"
end
function decrypt(content,password)
  --数据解密 (By: 32552732)
  local jdpuk=Cipher.getInstance("AES")
  jdpuk.init(Cipher.DECRYPT_MODE,SecretKeySpec(SecretKeyFactory.getInstance("PBKDF2WithHmacSHA1")
.generateSecret(PBEKeySpec(String(password).toCharArray(),byte[1],1,128)
).getEncoded()
,"AES"))
  return String(jdpuk.doFinal(Base64.decode(content,Base64.NO_WRAP))
),"By: 32552732"
end

# 使用

local status,data=pcall(encrypt,data,密钥)
if status and data~=nil and data~="" then
    print(data)
else
    --加密失败
    print("数据加密失败")
    return false
end

# 资料引用

  • Aes--(By: 32552732)
Gitlab在线编辑&贡献你的智慧 (opens new window)
上次更新: 2022/08/03, 09:42:19
正则表达式及lua字符串操作
软件数据存取策略

← 正则表达式及lua字符串操作 软件数据存取策略→

Theme by Vdoing | Copyright © 2022-2022 Created by coco | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式