BTEA算法加密 TypeScript 实现

// 加密
export function btea(source: Uint8Array, key: Uint8Array) {
  const n = source.length
  enum KEY { z, y, sum, q, p, e, DELTA }
  const uint32_t = new Uint32Array(7)
  uint32_t[KEY.z] = source[n - 1]
  uint32_t[KEY.y] = source[0]
  uint32_t[KEY.sum] = 0
  uint32_t[KEY.q] = 0
  uint32_t[KEY.p] = 0
  uint32_t[KEY.e] = 0
  uint32_t[KEY.DELTA] = 0x9e3779b9
  uint32_t[KEY.q] = 6 + 52 / n
  function MX(
    z: number,
    y: number,
    sum: number,
    key: Uint8Array,
    p: number,
    e: number
  ) {
    const MX_Temp = (z >> 5 ^ y << 2) + (y >> 3 ^ z << 4) ^ (sum ^ y) + (key[p & 3 ^ e] ^ z)
    return MX_Temp
  }
  while (uint32_t[KEY.q]-- > 0) {
    uint32_t[KEY.sum] += uint32_t[KEY.DELTA]
    uint32_t[KEY.e] = (uint32_t[KEY.sum] >> 2) & 3
    for (uint32_t[KEY.p] = 0; uint32_t[KEY.p] < n - 1; uint32_t[KEY.p]++) {
      uint32_t[KEY.y] = source[uint32_t[KEY.p] + 1]
      source[uint32_t[KEY.p]] += MX(
        uint32_t[KEY.z],
        uint32_t[KEY.y],
        uint32_t[KEY.sum],
        key,
        uint32_t[KEY.p],
        uint32_t[KEY.e],
      )
      uint32_t[KEY.z] = source[uint32_t[KEY.p]]
    }
    uint32_t[KEY.y] = source[0]

    source[n - 1] += MX(
      uint32_t[KEY.z],
      uint32_t[KEY.y],
      uint32_t[KEY.sum],
      key,
      uint32_t[KEY.p],
      uint32_t[KEY.e],
    )
    uint32_t[KEY.z] = source[n - 1]
  }
  return source
}
发布了1 篇原创文章 · 获赞 0 · 访问量 22

猜你喜欢

转载自blog.csdn.net/weixin_40862891/article/details/104753822