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的Object.assign用法示例分析

    简介 Object.assign 是 ES6 新增的一个API,能够将一个或多个源对象的属性复制到目标对象上。它的参数依次为目标对象和一个或多个源对象。如果源对象中的属性已经存在在目标对象中,那么源对象中的属性值将覆盖目标对象中的属性值。 语法 Object.assign(target, …sources) 参数: target (必须):要将源对象复制…

    JavaScript 2023年5月27日
    00
  • JavaScript 实现生命游戏

    JavaScript 实现生命游戏攻略 生命游戏是一个经典的细胞自动机,它是由英国数学家约翰·何顿·康威于1970年发明的。该游戏规则虽然简单,但是可玩性极高,主要涉及到生死、繁衍和群体规律等内容。 本文主要介绍了如何使用 JavaScript 实现生命游戏,分别从实现规则和游戏界面两个方面进行阐述。 实现规则 生命游戏的规则和初始状态都是在网格上的,它主要…

    JavaScript 2023年5月28日
    00
  • 如何去除js中的json存在的转义字符\问题

    我们来讲解一下如何去除 JavaScript 中 JSON 存在的转义字符 ‘\’ 问题的完整攻略。 问题描述 在 JavaScript 中,JSON 对象的属性值中可能会存在转义字符,如 “\n” 表示换行、”\t” 表示水平制表符等。这会影响到我们对 JSON 数据的解析和使用,因此需要将其转义字符进行去除,将其还原成可读的字符串。 解决方案 我们可以利…

    JavaScript 2023年5月27日
    00
  • Marked.js让您的文档编辑更加轻松自如

    ​ 低代码应用平台——kintone既可以保留更改记录,也有流程管理的功能,在公司内部分享会议记录啊、wiki等文档或学习资料等时非常的便利。 kintone还有丰富的文本编辑框,可以对内容进行编辑提高易读性。但是还是有不少人觉得如果能够使用Markdown编辑,将更加轻松,文本也将更加美观。※特别受程序员的欢迎:) 这次就向大家介绍如何使用Cybozu C…

    JavaScript 2023年5月8日
    00
  • 浅谈关于JS下大批量异步任务按顺序执行解决方案一点思考

    关于JS下大批量异步任务按顺序执行的解决方案,一般来说有以下几种: 解决方案一:使用async/await async/await 是 ES2017 中引入的语法糖,可以用来消灭异步回调地狱,提高代码可读性。下面是一个示例: async function runInOrder(list) { for (const func of list) { await …

    JavaScript 2023年5月27日
    00
  • createElement动态创建HTML对象脚本代码

    当我们需要在网页中动态创建HTML元素时,可以使用document.createElement()方法,其语法格式为: document.createElement(tagName) 其中tagName是指要创建的HTML元素的标签名,比如div,p,ul等。 接下来,我们来具体介绍使用createElement动态创建HTML对象的完整攻略: 1. 创建H…

    JavaScript 2023年6月10日
    00
  • 很酷的javascript loading效果代码

    要实现一个炫酷的JavaScript loading效果,可以按照以下步骤进行: 第一步:编写HTML结构 <div id="loading-wrapper"> <div id="loading-text">Loading…</div> <div id="load…

    JavaScript 2023年6月11日
    00
  • JavaScript中扩展Array contains方法实例

    下面是完整的攻略及示例。 扩展JavaScript中Array contains方法 在JavaScript中,Array原型对象已经提供了很多有用的方法,如push()、pop()、shift()、unshift()等。但是,有些时候我们可能需要自定义一些方法来满足特定的需求,而扩展contains()方法就是其中一个例子。 JavaScript中的Arr…

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