vite+vue3 usa aes-cross para informar: TypeError: crypto.createCipheriv no es una función Versión: "vue": "^3.2.23", "vite": "^2.6.4", "aes-cross": " ^1.0.9",
Para que las crypto funcionen en el navegador, sigue las instrucciones a continuación 👇
yarn add stream-browserify browserify-zlib events process util buffer
vite.config.js import { defineConfig } from 'vite' import vue from '@vitejs/plugin-vue' // https://vitejs.dev/config/ export default defineConfig({ plugins: [vue()], resolve: { alias: { process: "process/browser", stream: "stream-browserify", zlib: "browserify-zlib", util: 'util' } } })index.html <!-- [...] --> <div id="root"></div> <!-- node // crypto --> <script>window.global = window;</script> <script type="module"> import { Buffer } from "buffer/"; // <-- no typo here ("/") import process from "process"; import EventEmitter from "events"; window.Buffer = Buffer; window.process = process; window.EventEmitter = EventEmitter; </script> <!-- [...] -->App.vue y función de prueba en App.vue :
import crypto from 'crypto-browserify' import { Buffer } from 'buffer/' // <-- no typo here ("/") // test crypto function crypt() { // Node.js program to demonstrate the // crypto.createCipheriv() method const iv = crypto.randomBytes(16); const key = crypto.pbkdf2Sync("foobar", "salt", 1000, 32, 'sha512'); const cipher = crypto.createCipheriv('aes-256-gcm', key, iv); var text = crypto.randomBytes(200) var ourCipherText = Buffer.concat([cipher.update(text), cipher.final()]) console.log("ciphered text:", ourCipherText.toString('hex')) return ourCipherText.toString('hex'); } [...]Resultado ✅
La función crypto.createCipheriv es una función exclusiva de node.js, lo que significa que no está disponible en el navegador como en una aplicación Vue. Debe investigar SubtleCrypto , que proporciona funciones web nativas para muchos propósitos de encriptación como AES. Como siempre, se debe tener en cuenta que se debe ser muy cuidadoso y metódico al usar primitivas criptográficas de bajo nivel, especialmente en lo que respecta al cifrado. Esta página proporciona más ejemplos de cifrado AES específicamente.