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

黄页网站推广app软件现代示范校建设专题网站

黄页网站推广app软件,现代示范校建设专题网站,做企业官网设计公司前景,怎么建立一个免费网址基础算法说明 https://www.youtube.com/watch?vlnKPoWZnNNM 虽然这个视频讲的非常详细,但是涉及到具体底层算法,大致流程 1. 将数据转成HEX或者byte array 2.将数据分层一块块等大小的数据 3.将数据和key 进行一次混合,加密之后的输出&…

基础算法说明

https://www.youtube.com/watch?v=lnKPoWZnNNM

虽然这个视频讲的非常详细,但是涉及到具体底层算法,大致流程

1. 将数据转成HEX或者byte array

2.将数据分层一块块等大小的数据

3.将数据和key 进行一次混合,加密之后的输出,在生成新的key

4.将新的key和下一个数据,进行加密计算,继续重复

生成的KEY长度有128,192,256,不同的的长度对算法的速度有影响

当然key的长度越长,可能越安全这样

具体的算法是什么呢

为什么要有IV

另外这篇

https://www.youtube.com/watch?v=uWEPEBmFBHw

我们在AES的时候,有key了,为什么要IV呢

大概解释是,IV是个Ramdom的参数,不然每次用key算出来的值是一样的,

所以加上IV后,计算出来的结果会不一样。

Android上的具体AES实现

然后就是PL这个在Android上AES加密的具体实现

https://github.com/philipplackner/AndroidCrypto/tree/encrypt/decrypt

或者参考这个文档

https://medium.com/@jerry.cho.dev/android-keystore-aa7d2b43adfe

基本差不多

1.加密管理器

key的初始化和获取

@RequiresApi(Build.VERSION_CODES.M)
class CryptoManager {//获取keystroe,用于存放加密的keyprivate val keyStore = KeyStore.getInstance("AndroidKeyStore").apply {load(null)}//获取加密器,模式是ENCRYPT_MODEprivate val encryptCipher get() = Cipher.getInstance(TRANSFORMATION).apply {init(Cipher.ENCRYPT_MODE, getKey())}//解码器,模式DECRYPT_MODE,private fun getDecryptCipherForIv(iv: ByteArray): Cipher {return Cipher.getInstance(TRANSFORMATION).apply {init(Cipher.DECRYPT_MODE, getKey(), IvParameterSpec(iv))}}//加密秘钥,存储在keystroe中private fun getKey(): SecretKey {val existingKey = keyStore.getEntry("secret", null) as? KeyStore.SecretKeyEntryreturn existingKey?.secretKey ?: createKey()}private fun createKey(): SecretKey {return KeyGenerator.getInstance(ALGORITHM).apply {init(KeyGenParameterSpec.Builder("secret",KeyProperties.PURPOSE_ENCRYPT or KeyProperties.PURPOSE_DECRYPT).setBlockModes(BLOCK_MODE).setEncryptionPaddings(PADDING).setUserAuthenticationRequired(false).setRandomizedEncryptionRequired(true).build())}.generateKey()}//把byte进行加密,写入IV,写入机密后的bytesfun encrypt(bytes: ByteArray, outputStream: OutputStream): ByteArray {val encryptedBytes = encryptCipher.doFinal(bytes)outputStream.use {it.write(encryptCipher.iv.size)it.write(encryptCipher.iv)it.write(encryptedBytes.size)it.write(encryptedBytes)}return encryptedBytes}//解码,读取IV,根据IV再解码fun decrypt(inputStream: InputStream): ByteArray {return inputStream.use {val ivSize = it.read()val iv = ByteArray(ivSize)it.read(iv)val encryptedBytesSize = it.read()val encryptedBytes = ByteArray(encryptedBytesSize)it.read(encryptedBytes)getDecryptCipherForIv(iv).doFinal(encryptedBytes)}}companion object {private const val ALGORITHM = KeyProperties.KEY_ALGORITHM_AESprivate const val BLOCK_MODE = KeyProperties.BLOCK_MODE_CBCprivate const val PADDING = KeyProperties.ENCRYPTION_PADDING_PKCS7private const val TRANSFORMATION = "$ALGORITHM/$BLOCK_MODE/$PADDING"}}

        

2.加密

val bytes = messageToEncrypt.encodeToByteArray()val file = File(filesDir, "secret.txt")if(!file.exists()) {file.createNewFile()}val fos = FileOutputStream(file)messageToDecrypt = cryptoManager.encrypt(bytes = bytes,outputStream = fos).decodeToString()

3.解密

 val file = File(filesDir, "secret.txt")messageToEncrypt = cryptoManager.decrypt(inputStream = FileInputStream(file)).decodeToString()

http://www.yayakq.cn/news/233640/

相关文章:

  • 合肥中小型企业网站建设方案模板遵义公司建网站要多少费用
  • 国际设计师网站windows7 花生壳做网站服务器
  • 网站备案号被注销怎么办9元建站节
  • 网站seo外包价格上海网站推广方法
  • 高密网站开发北京谷歌优化
  • asp网站跳转浏览器wordpress 升级失败
  • 网站设计风格分类腾讯会议付费
  • 购物网站后台管理系统网站建设有什么专业术语
  • 网站运营建设的目标网站短链接生成器
  • 中国移动官方网站登录入口网站对联广告代码
  • 东莞网站建设方案维护个人简历wps模板免费
  • 网站建设视频教程网站微信代运营协议
  • 网站建设分哪几种jz做网站
  • 网站确定关键词 如何做专业微网站建设公司
  • 建设网站需要哪些北京做手机网站建设
  • 怎么查网站备案号设计网站名称
  • 国外网站建设 网站自己在线制作logo免费模版
  • 北京外贸网站设计备案宜春市住房和城乡建设局网站
  • 销售型网站建设的基本要素温州seo外包公司
  • 做网站是买服务器还是买cdn做网站 融资
  • 北京微网站制作什么类型的公司需要做建设网站的
  • 做网站卖广告位赚钱网站的项目建设周期
  • 商城网站需要多少空间360搜索建站公司
  • 刷单网站开发如何制作自己的网站图?
  • 58同城网站建设排名php网站建设的基本流程图
  • 网站建设一个人能做吗网站做seo推广 s
  • 济南seo网站建站wordpress 中国服务器
  • 做什么类型网站可以吸引用户没网站可以做百度推广吗
  • 福州企业建站程序网站如何做更新
  • 主要的网站开发技术路线新手电商运营从哪开始学