各种算法实现及数据安全
# 加密算法
先说说加密算法。 加密算法分为单向加密和双向加密。 单向加密包括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