Rumah hujung hadapan web tutorial js 使用Javascript加密解密

使用Javascript加密解密

Nov 22, 2016 pm 01:07 PM
javascript

在创建 Opal 网站时,我们所面临的挑战,是寻找在浏览器中加密解密的可靠方法。

这篇文章描述了浏览器端加密所面临的难题,并指出了近期的科技进步所提供的一种解决方案。

在 Web 应用中加密的三种选择

只有 JavaScript 才是所有浏览器都支持的语言。与 Opal 同类的 Web 应用使用 JavaScript 编写,以便于在任何现代浏览器上运作。如果这些应用要使用加密函数,那么 JavaScript 必须能够访问到它们。

目前,要把加密函数暴露给浏览器的 JavaScript,只有三个选项:

1、使用插件加密

插件是指运行在浏览器中,可以由 JavaScript 调用的,编译过的代码。

比如,Java 和 Flash 中存在的加密库。这样的做法通常性能很高,但是需要用户安装浏览器插件程序,而这,也是人们不愿意,或者完成不了的部分(如果他们使用的是公用电脑)。

另外一个选项是使用 Chrome 浏览器的 NaCl 客户端(Native Client) 程序,它允许运行由 C 或者 C++ 编译出的机器代码。同样,这种做法的性能很高,但是NaCl客户端程序只能用于 Chrome 浏览器。

即使这些插件和NaCl客户端程序在速度上有优势,但是因为他们需要用户使用特殊插件,或者使用特定浏览器,因此这种做法的可移植性不是很好。

2、使用 Web 加密 API

即将出现的 Web 加密 API 会给 JavaScript 提供原生的基本加密接口,让 Web 应用可以更快地加密解密。但是,这项接口仍在草案阶段,主流浏览器要采用这项技术还很长的一段时间。而现在,能在多数浏览器中使用的,只有crypto.getRandomValues()函数。

在 Web 加密 API 广泛应用之前,这并不是一项切实可行的浏览器端加密方案。

3、直接用 JavaScript 加密

这种方案的优点就在于高度的可移植性。所有的浏览器都可以执行 JavaScript,也就意味着所有的浏览器都可以调用 JavaScript 写成的加密库。

在 JavaScript 中加密主要有两项缺陷:安全性和速度。我们会轮流谈到这两项缺陷。

JavaScript 加密可以变得安全

有文章声称“JavaScript 加密是有害的”,并且列出了许多证据支持这一论述。

文中的某些观点现在不再准确了。例如,这篇文章说,Math.random()函数不是随机数的良好来源,所以不可能得到足够的随机数用来加密。Math.random() 函数的确不是随机数的良好来源。在现代浏览器已经提供了 crypto.getRandomValues()函数以取得足够数量的随机数。

这个帖子中有相当多的案例证明 JavaScript 加密是个坏主意,但这种做法也它的意义。

这条回答有利地驳斥了第一个帖子中的许多观点,同时也指出了 JavaScript 加密的两个有效用例:端对端的信息加密(也就是对主机访问做出防护的应用)以及安全的远程密码认证。这些正好是 Opal 加密的使用场景,所以我们使用 JavaScript 加密是非常自然的。

JavaScript 加密可以很快

直到最近,JavaScript 在进行安全加密所要用到的复杂计算时都很慢。这直接导致了许多应用程序需要依赖于插件所提供的加密功能,这样的做法可移植性差,同时也会让用户厌烦。

幸运的是,JavaScript 近年来的性能有极大提升,所以完全使用 JavaScript 进行加密操作是可行的。现在有许多 JavaScript 加密库可供选择(链接1,链接2,链接3,链接4,链接5,链接6,链接7,链接8,链接9)。

于是就变成了选哪一个库的问题。

NaCl,一个可以信赖的 C 语言加密库

NaCl (读作 “salt”) 是一个 C 语言的库,提供对称式密钥加密解密和公钥签名认证的应用函数。它由密码学人士编写,在加密社区广为人知,受到信赖。问题之一是 NaCl 是 C 语言,而不是 JavaScript 编写的。

js-NaCl:将 NaCl 编译成 JavaScript

幸运的是,我们能把 NaCl 编译成 LLVM 的字节码,然后用 emscripten 将这些字节码编译成 JavaScript。并且,LLVM 编译器能在编译时作许多优化,所以得到的 JavaScript 代码也会得到优化。因此我们可以将 NaCl 库编译成 JavaScript,作好在浏览器中运行的准备!

js-nacl 项目正是: 编译成 JavaScript 的 NaCl 加密库。

asm.js 的速度很快!

更好的是,emscripten 编译出的代码是 JavaScript 的子集,也叫做 asm.js。你可以将 asm.js 当作很像 JavaScript 的汇编语言。浏览器遇到了 asm.js 的代码块时,会将其编译成高效的机器码,运行速度接近原生代码。

目前主要只有 Firefox 浏览器支持 asm.js 的优化。这就使 js-nacl 在 Firefox 中的加密解密非常迅速,视具体操作的不同,比 Chrome 浏览器的速度快 2 至 8 倍。但是即使是 Chrome,js-nacl 也很快,超过了我们所测试的其他所有加密库。

NaCl 这样备受信赖的加密库和现代浏览器的快速执行,使像 Opal 这样的 Web 应用都应当使用 js-nacl 库。

同样的原因下,Opal 使用了由 emscripten 编译出的 asm.js 版 scrypt 库来扩展密钥(正在这篇文章中启用)。你可以看到由项目维护者提供的 js-nacl 和 js-scrypt 性能的对比。我们同时也给 js-nacl 作了 jsperf 测试,以了解各个不同浏览器版本的性能差异,你也可以随意尝试。


Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Bagaimana untuk melaksanakan sistem pengecaman pertuturan dalam talian menggunakan WebSocket dan JavaScript Bagaimana untuk melaksanakan sistem pengecaman pertuturan dalam talian menggunakan WebSocket dan JavaScript Dec 17, 2023 pm 02:54 PM

Cara menggunakan WebSocket dan JavaScript untuk melaksanakan sistem pengecaman pertuturan dalam talian Pengenalan: Dengan perkembangan teknologi yang berterusan, teknologi pengecaman pertuturan telah menjadi bahagian penting dalam bidang kecerdasan buatan. Sistem pengecaman pertuturan dalam talian berdasarkan WebSocket dan JavaScript mempunyai ciri kependaman rendah, masa nyata dan platform merentas, dan telah menjadi penyelesaian yang digunakan secara meluas. Artikel ini akan memperkenalkan cara menggunakan WebSocket dan JavaScript untuk melaksanakan sistem pengecaman pertuturan dalam talian.

WebSocket dan JavaScript: teknologi utama untuk melaksanakan sistem pemantauan masa nyata WebSocket dan JavaScript: teknologi utama untuk melaksanakan sistem pemantauan masa nyata Dec 17, 2023 pm 05:30 PM

WebSocket dan JavaScript: Teknologi utama untuk merealisasikan sistem pemantauan masa nyata Pengenalan: Dengan perkembangan pesat teknologi Internet, sistem pemantauan masa nyata telah digunakan secara meluas dalam pelbagai bidang. Salah satu teknologi utama untuk mencapai pemantauan masa nyata ialah gabungan WebSocket dan JavaScript. Artikel ini akan memperkenalkan aplikasi WebSocket dan JavaScript dalam sistem pemantauan masa nyata, memberikan contoh kod dan menerangkan prinsip pelaksanaannya secara terperinci. 1. Teknologi WebSocket

Cara menggunakan JavaScript dan WebSocket untuk melaksanakan sistem pesanan dalam talian masa nyata Cara menggunakan JavaScript dan WebSocket untuk melaksanakan sistem pesanan dalam talian masa nyata Dec 17, 2023 pm 12:09 PM

Pengenalan kepada cara menggunakan JavaScript dan WebSocket untuk melaksanakan sistem pesanan dalam talian masa nyata: Dengan populariti Internet dan kemajuan teknologi, semakin banyak restoran telah mula menyediakan perkhidmatan pesanan dalam talian. Untuk melaksanakan sistem pesanan dalam talian masa nyata, kami boleh menggunakan teknologi JavaScript dan WebSocket. WebSocket ialah protokol komunikasi dupleks penuh berdasarkan protokol TCP, yang boleh merealisasikan komunikasi dua hala masa nyata antara pelanggan dan pelayan. Dalam sistem pesanan dalam talian masa nyata, apabila pengguna memilih hidangan dan membuat pesanan

Bagaimana untuk melaksanakan sistem tempahan dalam talian menggunakan WebSocket dan JavaScript Bagaimana untuk melaksanakan sistem tempahan dalam talian menggunakan WebSocket dan JavaScript Dec 17, 2023 am 09:39 AM

Cara menggunakan WebSocket dan JavaScript untuk melaksanakan sistem tempahan dalam talian Dalam era digital hari ini, semakin banyak perniagaan dan perkhidmatan perlu menyediakan fungsi tempahan dalam talian. Adalah penting untuk melaksanakan sistem tempahan dalam talian yang cekap dan masa nyata. Artikel ini akan memperkenalkan cara menggunakan WebSocket dan JavaScript untuk melaksanakan sistem tempahan dalam talian dan memberikan contoh kod khusus. 1. Apakah itu WebSocket? WebSocket ialah kaedah dupleks penuh pada sambungan TCP tunggal.

JavaScript dan WebSocket: Membina sistem ramalan cuaca masa nyata yang cekap JavaScript dan WebSocket: Membina sistem ramalan cuaca masa nyata yang cekap Dec 17, 2023 pm 05:13 PM

JavaScript dan WebSocket: Membina sistem ramalan cuaca masa nyata yang cekap Pengenalan: Hari ini, ketepatan ramalan cuaca sangat penting kepada kehidupan harian dan membuat keputusan. Apabila teknologi berkembang, kami boleh menyediakan ramalan cuaca yang lebih tepat dan boleh dipercayai dengan mendapatkan data cuaca dalam masa nyata. Dalam artikel ini, kita akan mempelajari cara menggunakan teknologi JavaScript dan WebSocket untuk membina sistem ramalan cuaca masa nyata yang cekap. Artikel ini akan menunjukkan proses pelaksanaan melalui contoh kod tertentu. Kami

Bagaimana untuk menggunakan insertBefore dalam javascript Bagaimana untuk menggunakan insertBefore dalam javascript Nov 24, 2023 am 11:56 AM

Penggunaan: Dalam JavaScript, kaedah insertBefore() digunakan untuk memasukkan nod baharu dalam pepohon DOM. Kaedah ini memerlukan dua parameter: nod baharu untuk dimasukkan dan nod rujukan (iaitu nod di mana nod baharu akan dimasukkan).

Tutorial JavaScript Mudah: Cara Mendapatkan Kod Status HTTP Tutorial JavaScript Mudah: Cara Mendapatkan Kod Status HTTP Jan 05, 2024 pm 06:08 PM

Tutorial JavaScript: Bagaimana untuk mendapatkan kod status HTTP, contoh kod khusus diperlukan: Dalam pembangunan web, interaksi data dengan pelayan sering terlibat. Apabila berkomunikasi dengan pelayan, kami selalunya perlu mendapatkan kod status HTTP yang dikembalikan untuk menentukan sama ada operasi itu berjaya dan melaksanakan pemprosesan yang sepadan berdasarkan kod status yang berbeza. Artikel ini akan mengajar anda cara menggunakan JavaScript untuk mendapatkan kod status HTTP dan menyediakan beberapa contoh kod praktikal. Menggunakan XMLHttpRequest

JavaScript dan WebSocket: Membina sistem pemprosesan imej masa nyata yang cekap JavaScript dan WebSocket: Membina sistem pemprosesan imej masa nyata yang cekap Dec 17, 2023 am 08:41 AM

JavaScript ialah bahasa pengaturcaraan yang digunakan secara meluas dalam pembangunan web, manakala WebSocket ialah protokol rangkaian yang digunakan untuk komunikasi masa nyata. Menggabungkan fungsi berkuasa kedua-duanya, kami boleh mencipta sistem pemprosesan imej masa nyata yang cekap. Artikel ini akan memperkenalkan cara untuk melaksanakan sistem ini menggunakan JavaScript dan WebSocket, dan memberikan contoh kod khusus. Pertama, kita perlu menjelaskan keperluan dan matlamat sistem pemprosesan imej masa nyata. Katakan kita mempunyai peranti kamera yang boleh mengumpul data imej masa nyata

See all articles