项目作者: vincheung

项目描述 :
:strawberry: JavaScript 加密库 crypto-js 的封装。
高级语言: JavaScript
项目地址: git://github.com/vincheung/cipher.git
创建时间: 2019-07-17T10:19:03Z
项目社区:https://github.com/vincheung/cipher

开源协议:MIT License

关键词:
aes cipher crypto-js des tdes triple-des

下载


cipher

JavaScript 加密库 crypto-js 的封装。

使用

Install:

  1. npm install @vincheung/cipher -S

Import:

  1. <script src="../dist/cipher.min.js"></script>

API

  • cipher 依赖 crypto-js 实现,暴露全局对象 Cipher

  • cipher 的默认加密模式为 ECB,填充方式为 PKCS7

  • Cipher 暴露加密方法 encrypt,解密方法 decrypt

  • encrypt:入参

    • data:明文

    • key:密钥

    • {}:配置

      • cipher:算法的名称

      • mode:模式

      • padding:填充

      • iv:向量

  • decrypt:入参

    • data:密文

    • key:密钥

    • {}:配置

      • cipher:算法的名称

      • mode:模式

      • padding:填充

      • iv:向量

      • compile:CryptoJS.enc.Utf8 转译,默认值 true(解密结果默认会使用 CryptoJS.enc.Utf8 转译,你可以使用 compile: false 来关闭转译)

  • Cipher 对象下的 CryptoJS 属性对象完整继承来源于 crypto-js,你仍可以通过 Cipher.CryptoJS 来使用 crypto-js 的所有功能

示例

  1. import Cipher from '@vincheung/cipher'
  2. const message = 'https://github.com/vincheung/cipher'
  3. const key = 'cipher'
  4. // DES
  5. const cipherDES = Cipher.encrypt(message, key, {
  6. cipher: 'DES',
  7. })
  8. const plainDES = Cipher.decrypt(cipherDES, key, {
  9. cipher: 'DES',
  10. })
  11. console.log(cipherDES)
  12. console.log(plainDES)
  13. // TripleDES
  14. const cipherTripleDES = Cipher.encrypt(message, key, {
  15. cipher: 'TripleDES',
  16. mode: 'CBC',
  17. padding: 'ZeroPadding',
  18. })
  19. const plainTripleDES = Cipher.decrypt(cipherTripleDES, key, {
  20. cipher: 'TripleDES',
  21. mode: 'CBC',
  22. padding: 'ZeroPadding',
  23. })
  24. console.log(cipherTripleDES)
  25. console.log(plainTripleDES)
  26. // AES
  27. const cipherAES = Cipher.encrypt(message, key, {
  28. cipher: 'AES',
  29. })
  30. const plainAES = Cipher.decrypt(cipherAES, key, {
  31. cipher: 'AES',
  32. })
  33. console.log(cipherAES)
  34. console.log(plainAES)
  1. // 假设密钥 key 的处理使用
  2. import Cipher from '@vincheung/cipher'
  3. const { CryptoJS } = Cipher
  4. const message = 'https://github.com/vincheung/cipher'
  5. const key = 'cipher'
  6. const keyHex = CryptoJS.enc.Utf8.parse(key)
  7. const cipherDES = Cipher.encrypt(message, keyHex, {
  8. cipher: 'DES',
  9. })

拓展

  • CBC 需要初始化向量 iv,来加密第一块 C0

  • PKCS5 只能用来填充 64bit 的数据块

  • 所有需要填充的地方都以 0 填充

  • 在不填充的情况下,加密内容不是 8bit 整数倍加密会报错

  • Java 的默认模式为 ECB,key 的 size 必须为 24默认填充方式为 PKCS5,没有 PKCS7

  • C# 的默认模式为 CBC,默认填充方式为 PKCS7

  • JavaScript 填充方式 PKCS7 对应 Java 填充方式 PKCS5,没有 PKCS5

兼容

cipher 使用广泛支持的 ES6 Object.assign,如果你的环境较为老旧,可以使用垫片 polyfill。

License

The MIT License.