Javascript实现的SHA-256加密算法完整实例

Javascript实现的SHA-256加密算法完整实例

SHA-256是一种常用的加密算法,可以对文本进行加密处理,被广泛应用于网络安全、密码学等领域。本文将介绍如何使用javascript语言实现SHA-256加密算法,并提供详细的完整代码实例。

一、SHA-256加密算法基础知识

SHA-256是一种基于哈希加密算法的加密方式,它可以将任意长度的输入信息转换为长度为256位(32字节)的哈希值。相较于MD5等算法,SHA-256具有更高的安全性,更难以被破解。

SHA-256算法的实现过程,可以分为四个步骤:

  1. 填充数据:根据算法规定的填充方式,将原始数据填充到一定长度。
  2. 初始化:对填充后的数据进行初始化处理,生成初始值。
  3. 处理消息:对初始化后的消息进行处理,迭代生成中间哈希值。
  4. 生成哈希值:将中间哈希值合并,生成最终的哈希值。

二、Javascript实现SHA-256加密算法代码

下面是使用javascript实现SHA-256算法的基础代码实例:

function sha256(message) {
  const hash = new TextEncoder().encode(message);
  const hashBuffer = crypto.subtle.digest('SHA-256', hash);
  return hex(hashBuffer);
}

// 将二进制转化为16进制
function hex(buffer) {
  const hexCodes = [];
  const view = new DataView(buffer);
  for (let i = 0; i < view.byteLength; i += 4) {
    const value = view.getUint32(i)
    const stringValue = value.toString(16)
    const padding = '00000000'
    const paddedValue = (padding + stringValue).slice(-padding.length)
    hexCodes.push(paddedValue);
  }
  return hexCodes.join("");
}

在上面的代码中,我们使用了 TextEncoder() API 将原始消息转化为UTF-8编码,并将计算结果进行了16进制编码的转换。

三、完整SHA-256加密算法示例

  1. 示例1:使用SHA-256算法生成字符串hash

下面是使用SHA-256算法生成一个字符串hash的完整样例:

const message = 'Hello, World!';
console.log(`原始消息: ${message}`);
console.log(`SHA-256哈希值: ${sha256(message)}`);

运行这段代码,我们将会得到以下输出:

原始消息: Hello, World!
SHA-256哈希值: a591a6d40bf420404a011733cfb7b190d62c65bf0bcda32b57b277d9ad9f146e
  1. 示例2:使用SHA-256算法生成文件hash

下面是使用SHA-256算法生成文件hash的完整样例:

function sha256File(file) {
  return new Promise((resolve, reject) => {
    const fileReader = new FileReader();
    fileReader.onload = () => {
      const view = new DataView(fileReader.result);
      crypto.subtle.digest('SHA-256', view)
        .then(buffer => {
          const hashArray = Array.from(new Uint8Array(buffer));
          const hashHex = hashArray.map(b => b.toString(16).padStart(2, '0')).join('');
          resolve(hashHex);
        }).catch(err => reject(err));
    }
    fileReader.onerror = () => {
      fileReader.abort();
      reject(new DOMException("无法读取文件"));
    };
    fileReader.readAsArrayBuffer(file);
  });
}

// HTML输入框
const input = document.createElement('input');
input.type = 'file';
input.onchange = async () => {
  const file = input.files[0];
  console.log(`文件hash:${await sha256File(file)}`);
};
document.body.appendChild(input);

运行这段代码,我们将会得到一个文件选择弹框,选择一个文件后将计算该文件的SHA-256哈希值。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Javascript实现的SHA-256加密算法完整实例 - Python技术站

(0)
上一篇 2023年5月19日
下一篇 2023年5月19日

相关文章

  • 浅谈JS如何实现真正的对象常量

    好的。我们先来解释一下什么是对象常量。对象常量是一种不可变对象,即其属性不可被修改。在 JavaScript 中,没有内置的对象常量实现方式,但可以通过一些技巧来实现。 具体而言,我们可以使用 Object.freeze() 函数来冻结对象。Object.freeze() 方法可以冻结对象的属性,即使它们是对象本身的属性也无法修改。在这个过程中,对象上的所有…

    JavaScript 2023年6月11日
    00
  • jquery设置表单元素为不可用的简单代码

    当需要禁用表单元素时,我们可以使用 jQuery 非常简单地设置该元素为不可用状态。以下是这个过程的详细攻略。 步骤1:选择器 首先,我们需要使用 jQuery 选择器来选定要设置为不可用的表单元素。选择器的语法与 CSS 选择器基本相同。以下是一些常见的选择器示例: 选择一个具有特定 CSS 类的元素:$(‘.myclass’) 选择所有具有特定标记名称的…

    JavaScript 2023年6月10日
    00
  • JS基于ocanvas插件实现的简单画板效果代码(附demo源码下载)

    下面是对“JS基于ocanvas插件实现的简单画板效果代码(附demo源码下载)”的完整攻略: 1. 介绍 本篇攻略将介绍如何使用JS基于ocanvas插件实现简单画板效果,并附带demo源码下载。ocanvas是HTML5 Canvas的一个扩展库,它提供了更简单、更易用的API,并且可以方便地实现一些高级功能。 2. 前置条件 在开始使用ocanvas前…

    JavaScript 2023年6月10日
    00
  • 使用JS中的Replace()方法遇到的问题小结

    使用JS中的Replace()方法是对字符串进行替换操作的常见方法,但在使用过程中,可能会遇到一些问题,本文将对使用过程中可能会遇到的问题进行小结,希望能帮助读者更好地掌握该方法的使用。 问题一:正则表达式符号的转义问题 在进行字符串的替换操作时,可能需要使用到正则表达式符号,例如点号(.)、问号(?)等。但是,在使用时,这些符号需要进行转义,如用“.”代替…

    JavaScript 2023年5月18日
    00
  • Bootstrap弹出带合法性检查的登录框实例代码【推荐】

    针对这个问题,我来为你详细讲解一下”Bootstrap弹出带合法性检查的登录框实例代码”的攻略。 首先,我们需要明确几点: Bootstrap是一个开源的前端框架,提供了丰富的UI组件和布局; 该登录框实例需要使用Bootstrap和jQuery两个库,因此需要在页面中引入这两个库; 合法性检查是指在用户输入账号和密码后,是否满足一定的输入规则,比如不能为空…

    JavaScript 2023年6月10日
    00
  • Javascript Math exp() 方法

    JavaScript中的Math.exp()方法用于返回自然数e的x次幂,其中x是传递给该方法的参数。以下是关于Math.exp()方法的完整攻略,包括两个示例。 JavaScript Math对象的exp()方法 JavaScript Math对象中的exp()方法用于返回自然数e的x次幂,其中x是传递给该方法的参数。 下面是exp()方法的语法: Mat…

    JavaScript 2023年5月11日
    00
  • JS实现深拷贝的几种方法介绍

    JS实现深拷贝的几种方法介绍 在 JavaScript 编程过程中,我们经常需要用到对象的复制。有时候,我们需要的是深度拷贝,即在内存中完全克隆一个对象,使得被克隆对象之后的操作互不干扰。JS实现深拷贝的几种方法主要包括: 使用 JSON.parse 和 JSON.stringify 方法进行深拷贝 使用递归方法进行深拷贝 使用第三方库进行深拷贝 下面将对以…

    JavaScript 2023年5月27日
    00
  • JS获得一个对象的所有属性和方法实例

    获取一个对象的所有属性和方法实例有多种方式,下面将介绍其中两种常用的方法。 1. 使用 Object.getOwnPropertyNames() 和 Object.getOwnPropertySymbols() Object.getOwnPropertyNames() 可以获取对象自有的所有属性名,包括不可枚举的属性(例如,通过 Object.defineP…

    JavaScript 2023年5月27日
    00
合作推广
合作推广
分享本页
返回顶部