Scrypt 不止是加密算法,也是莱特币的挖矿算法

在密码学中,scrypt(念作“ess crypt”)是Colin Percival于2009年所发明的金钥推衍函数,当初设计用在他所创立的Tarsnap服务上。设计时考虑到大规模的客制硬件攻击而刻意设计需要大量内存运算。2016年,scrypt算法发布在RFC 7914。scrypt的简化版被用在数个密码货币的工作量证明(Proof-of-Work)上。

Scrypt不仅计算所需时间长,而且占用的内存也多,使得并行计算多个摘要异常困难,因此利用rainbow table进行暴力攻击更加困难。Scrypt 没有在生产环境中大规模应用,并且缺乏仔细的审察和广泛的函数库支持。但是,Scrypt 在算法层面只要没有破绽,它的安全性应该高于PBKDF2和bcrypt。

Scrypt 官网地址:https://www.tarsnap.com/scrypt.html

Scrypt 算法 Java 的实现

下面是 Scrypt 算法的调用。

下面的代码实现了真正的加密

加密后的字节数组还需要使用 Base64 进行 encode。

完整的 Scrypt Java 版本已经放到github上。github地址:https://github.com/fengzhizi715/blockchain_study

Scrypt 算法 C 的实现

在 Android 中调用 Scrypt 算法。

其中,SignUtils 是通过 JNI 来调用 C 的代码。

另外,需要注意的是在 Android 中,Base64 的工具类略有不同。

完整的 Scrypt C 版本已经放到github上,方便在 App 中进行调用。github地址:https://github.com/fengzhizi715/Scrypt_jni

总结

上面整理了 Scrypt 的两种实现方式,如果对于安全性要求很高的密码,可以采用 Scrypt 算法。该算法唯一的缺点就是慢。

关注【Java与Android技术栈】

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180805G1DUDH00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券