当前位置: 首页 > news >正文

旅游三级分销网站网站内容编辑

旅游三级分销网站,网站内容编辑,查询网站建设时间,信阳专业做网站公司在我们App开发过程中,可能会涉及到一些敏感和安全数据需要加密的情况,比如登录token的存储。我们往往会使用一些加密算法将这些敏感数据加密之后再保存起来,需要取出来的时候再进行解密。 此时就会有一个问题:用于加解密的Key该如何存储? 如果把Key和加密后的数据存到一起…

在我们App开发过程中,可能会涉及到一些敏感和安全数据需要加密的情况,比如登录token的存储。我们往往会使用一些加密算法将这些敏感数据加密之后再保存起来,需要取出来的时候再进行解密。

此时就会有一个问题:用于加解密的Key该如何存储?

  • 如果把Key和加密后的数据存到一起,那有一定的安全风险。
  • 对Key再进行一次加密,这就陷入了死循环。

为了保证安全性,Android提供了KeyStore系统来保存Key,本文就浅探一下KeyStore及其使用方法。

一、什么是KeyStore?如何保证安全性?

1、什么是KeyStore?

先来看看官方对他的定义:

This class represents a storage facility for cryptographic keys and certificates.

这个类代表加密密钥和证书的存储设施

定义其实很简单,他就是用来保存加解密的Key和证书的。

2、如何保证安全性?

安全性保护措施在官方文档里有写(Android 密钥库系统 | Android 开发者 | Android Developers (google.cn)), 我就按自己的理解总结一下:

  • Key是保存在手机系统里的,应用进程在获取Key的时候是通过系统进程获取到内存里的。也就是说只能在本应用进程里才能拿到Key,想要把Key提取出来是不可能的。
  • KeyStore还可以指定密钥的授权使用方式(比如用户安全锁验证),可保证必须在授权的情况下才能获取到Key。

总的来说就是使用者只能在应用程序运行时使用KeyStore里存放的Key,除非攻击者拿到源码打断点调试,否则无法知道Key到底是什么。这样就保证了存储Key的安全性。

二、KeyStore的使用

KeyStore支持的加密算法有很多,其中对部分算法有API Level的要求,具体可以查看Android 密钥库系统 | Android 开发者 | Android Developers (google.cn)

本文就以AES加密算法为例,简单说明一下KeyStore的使用方式。注意,本文涉及到的代码需要minSdk>=23.

先简单实现一下AES算法的加解密

1、数据加密

object AESUtil {private const val IV_BLOCK_SIZE = 16fun encryptAES(encryptBytes: ByteArray, encryptKey: SecretKey): ByteArray?{try {//创建密码器val cipher = Cipher.getInstance("AES/CBC/PKCS7PADDING")//用密钥初始化Cipher对象cipher.init(Cipher.ENCRYPT_MODE, encryptKey)val final = cipher.doFinal(encryptBytes)// iv占前16位,加密后的数据占后面return cipher.iv + final} catch (e: NoSuchPaddingException) {e.printStackTrace()} catch (e: NoSuchAlgorithmException) {e.printStackTrace()} catch (e: InvalidAlgorithmParameterException) {e.printStackTrace()} catch (e: InvalidKeyException) {e.printStackTrace()} catch (e: BadPaddingException) {e.printStackTrace()} catch (e: IllegalBlockSizeException) {e.printStackTrace()}return null}fun decryptAES(decryptBytes: ByteArray, decryptKey: SecretKey): ByteArray? {try {// 先取出IVval iv = decryptBytes.copyOfRange(0, IV_BLOCK_SIZE)// 取出加密后的数据val decryptData = decryptBytes.copyOfRange(IV_BLOCK_SIZE, decryptBytes.size)val cipher = Cipher.getInstance("AES/CBC/PKCS7PADDING")cipher.init(Cipher.DECRYPT_MODE, decryptKey, IvParameterSpec(iv))return cipher.doFinal(decryptData)} catch (e: NoSuchPaddingException) {e.printStackTrace()} catch (e: NoSuchAlgorithmException) {e.printStackTrace()} catch (e: InvalidAlgorithmParameterException) {e.printStackTrace()} catch (e: InvalidKeyException) {e.printStackTrace()} catch (e: BadPaddingException) {e.printStackTrace()} catch (e: IllegalBlockSizeException) {e
http://www.dt0577.cn/news/4688.html

相关文章:

  • 南京网站开发南京乐识好最近中国新闻热点大事件
  • 贵阳网站建设黔搜电脑培训零基础培训班
  • wordpress 滑动 评论seo外包公司怎么样
  • 做网站需要哪些资料营销案例分析
  • 护肤品网站建设分析深圳seo排名
  • 网站虚拟主机可以做伦理片吗百度指数代表什么
  • 电话做网站的推广企业老板培训课程
  • 手机网站模板单页广州seo网站多少钱
  • 品牌型网站建设新的网络推广方式
  • 个人网站 虚拟主机百度搜索一下
  • 做动漫图片的网站微信朋友圈的广告怎么投放
  • 网站建设需要考什么证湖南网站设计外包哪家好
  • php网站开发答案苏州seo招聘
  • 做美食的网站手机百度下载免费安装
  • 北京齐力众信网站建设网站编辑怎么做
  • app开发网站开发教程营销广告文案
  • 深圳政府门户网站建设评价西安seo霸屏
  • 俄罗斯电商平台有哪些系统优化app最新版
  • 沧州最新消息今天百度关键词优化方法
  • 南通建筑人才网seo关键词优化软件app
  • 武汉定制网页设计seo发帖网站
  • wordpress去掉搜索功能上海站群优化公司
  • 学校定制网站建设公司营业推广名词解释
  • 网站用php做的吗app推广公司怎么对接业务
  • 织梦如何做网站百度官网入口链接
  • 南山网站建设多少钱软文案例200字
  • 域名注册没有网站电商运营工资大概多少
  • 有网站源程序怎么做网站后台湖南有实力seo优化哪家好
  • 济南市住建厅官方网站国外免费建站网站搭建
  • 怎么看一个网站有没有做百度推广怎么推广游戏叫别人玩