Kotlin KotprefEncryptSupport加密sharepreference

前言

最近在学习kotlin,发现一个比较不错的sharepreference库kotpref
它是利用kotlin的扩展和代理来实现的,使用起来也方便快捷。
但是,就是还差一个想要的功能,就是加密。
然后自己写了个KotprefEncryptSupport来支持一下。

安装

allprojects {
        repositories {
            maven { url 'https://jitpack.io' }
        }
    }
dependencies {
    compile 'com.github.fly7632785:KotprefEncryptSupport:1.0.1'
}

初始化

它已经包含了gson-support,所以,如果使用了这个库,就不用再接入gson-support了

class SampleApplication : Application() {
    override fun onCreate() {
        super.onCreate()
        Kotpref.init(applicationContext)
        // add Encrypt Support 
        Kotpref.gson = Gson()
        Kotpref.cipherAdapter = SharedPrefCipherAdapter(applicationContext)
    }
}

申明使用

    var password by ecStringPref("jafirPass")
    var code1 by ecNullableStringPref()
    var isMan by ecBooleanPref(true)
    var age1 by ecIntPref(23)
    var highScore1 by ecLongPref(1111111111L)
    var rate1 by ecFloatPref(0.5555f)
    var person1 by ecGsonPref(Person("g jafir", 21))
    var avatar21 by ecGsonPref(Avatar())
    var avatar22 by ecGsonNullablePref(Avatar())

支持 Int,String,Boolean,Long,Float,Gson

高级

如果你想自定义加密规则,也是可以的。
只需要自己实现一下CipherAdapter,然后实现一下encrypt和decrypt两个方法就可以了。例如

class SharedPrefCipherAdapter @Throws(Exception::class)
constructor(context: Context) : CipherAdapter {
    private val secretKey: SecretKey

    init {
        this.secretKey = AESUtil.generateKey(context)
    }

    override fun encrypt(raw: String): String {
        return AESUtil.execEncrypted(secretKey, raw)
    }

    override fun decrypt(encode: String): String {
        return AESUtil.execDecrypted(secretKey, encode)
    }
}

更多的细节可以看源码

默认的加密

库中已经集成了一个默认的加密adapter:SharedPrefCipherAdapter
采用的是AES、PBE混合的加密方式,AES加密内容,然后PBE加密secret key

Xml
<map>
    <long name="highScore" value="3901" />
    <float name="rate" value="0.4" />
    <string name="password">WUb7wV8SS18d9hEvUt8kPg==&#10;    </string>
    <string name="age1">vELsGwmt5Bhz1WkAuasEHA==&#10;    </string>
    <string name="avatar22">rN29eRFNgIlf6yIAV9cptoyabAkqmDqDtf6S4ElzPWIVS1YRMXw2avvYbyJseOZEOBqVE9kAAARV&#10;T4MpZ31fAw==&#10;    </string>
    <string name="avatar1">null</string>
    <string name="avatar21">rN29eRFNgIlf6yIAV9cpttcgywAfWQ9P21mqhkpLjhty0xyusdIZtGLibaD5gzdExLQhyLF2BbIR&#10;Vz7hM0a0KA==&#10;    </string>
    <string name="avatar">{&quot;icon&quot;:&quot;lion&quot;,&quot;updated_at&quot;:&quot;Dec 19, 2017 11:13:28 PM&quot;}</string>
    <string name="person1">gA4aAC4rCqoo9Vz3VCBgVtnerDMep/WhMsoUK736qJ4=&#10;    </string>
    <string name="code">451B65F6-EF95-4C2C-AE76-D34535F51B3B</string>
    <string name="isMan">gi8S6qu7Sklcx0oiYDGnsw==&#10;    </string>
    <set name="prizes">
        <string>New Born</string>
    </set>
    <int name="age" value="2" />
    <string name="highScore1">L5E9zu5NO5AQGFVZBmmHTA==&#10;    </string>
    <string name="name">chibatching Jr</string>
    <string name="rate1">Pa0WPZj6Of7DV8S4LYfp2g==&#10;    </string>
    <string name="code1">FZbcxuspUwL0HUdYvuQ6ltT/nWL+e5d3ZXtfTfPXGcccThyKavFb+7iB1bR8PGF6&#10;    </string>
    <string name="gameLevel">EASY</string>
</map>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
k中有很多加密解密库可以使用。其中一些常用的库包括: 1. Java Cryptography Extension (JCE):Java的标准加密解密库,可以在Kotlin中使用。 2. Bouncy Castle: 一个开源的加密库,支持多种加密算法和协议。 3. Kotlin Crypto: 一个基于Kotlin语言的轻量级加密库,提供了对常见加密算法的支持。 4. Tink: 由Google开发的一个现代化的加密库,支持各种加密操作和安全功能。 以下是使用Kotlin Crypto库进行加密解密的示例代码: ```kotlin import org.bouncycastle.jce.provider.BouncyCastleProvider import org.bouncycastle.util.encoders.Base64 import javax.crypto.Cipher import javax.crypto.spec.SecretKeySpec fun encrypt(input: String, password: String): String { val cipher = Cipher.getInstance("AES/ECB/PKCS5Padding", BouncyCastleProvider()) val keySpec = SecretKeySpec(password.toByteArray(), "AES") cipher.init(Cipher.ENCRYPT_MODE, keySpec) val encryptedBytes = cipher.doFinal(input.toByteArray()) return Base64.toBase64String(encryptedBytes) } fun decrypt(input: String, password: String): String { val cipher = Cipher.getInstance("AES/ECB/PKCS5Padding", BouncyCastleProvider()) val keySpec = SecretKeySpec(password.toByteArray(), "AES") cipher.init(Cipher.DECRYPT_MODE, keySpec) val decryptedBytes = cipher.doFinal(Base64.decode(input)) return String(decryptedBytes) } fun main(args: Array<String>) { val input = "欢迎来到Errol_King的博客" val password = "12345678" val encrypt = encrypt(input, password) println(encrypt) val decrypt = decrypt(encrypt, password) println(decrypt) } ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值