当前位置: 首页 > 知识库问答 >
问题:

前端 - Vite+Vue3,怎样实现标签的内容加密,不是代码混淆 ?

慕永年
2024-09-09

用Vite+vue3写一个小项目,不想数据明文出现在编译后的js文件中。

比如使用组件:

<MyComponent>  
    <div>Hello</div>
    <div>World</div>
</MyComponent>

这个MyCouponent组件默认插槽会写正常的HTML标签内容。

想在Vite编译阶段加密,比如这个示例里的HelloWorld这两个字符串,实现编译输出的js文件里是密文,在浏览器看的时候看明文(会要求登录后看到明文)。

尝试了一些代码混淆方案,都是只混淆代码,HelloWorld还是明文。

现在需求是混淆或者加密数据,代码逻辑可以不混淆。

共有2个答案

季小云
2024-09-09

可以搜一下ROT47,编译时先混淆,再加密一下,在运行时包一个IIFE自动解密

贺山
2024-09-09

在Vite+Vue3项目中实现内容加密(特别是针对模板中的静态文本),而不是仅仅代码混淆,确实需要一些不同的策略,因为Vue模板通常是直接转换为渲染函数或VDOM,并不会经过传统的“编译”过程来加密字符串。不过,你可以通过几种方法来实现你的需求:

1. 服务器端渲染和加密

一种常见的方法是使用服务器端渲染(SSR)并在服务器端对内容进行加密。当用户请求页面时,服务器解密内容并将其发送到客户端。Vue 3 支持服务器端渲染,但你需要使用Nuxt.js等框架来更容易地实现这一点。

2. 客户端解密

如果你仍然希望在客户端显示内容,但又不希望这些内容以明文形式出现在JS文件中,你可以考虑以下步骤:

a. 加密内容

在服务器端或构建时,将需要加密的文本(如"Hello"和"World")进行加密,并将加密后的密文存储在环境中或构建产物中(如JSON文件)。

b. Vue组件中使用密文

在Vue组件中,你可以通过异步请求或直接从构建产物中读取加密的文本。然后,使用JavaScript中的加密库(如CryptoJS)来解密这些文本,并在Vue模板中渲染解密后的内容。

示例

假设你有一个服务或构建脚本来加密文本,并将加密后的结果存储在一个JSON文件中。

encrypted-texts.json

{
  "hello": "加密后的Hello",
  "world": "加密后的World"
}

Vue组件

<template>
  <div>
    <div>{{ decryptedHello }}</div>
    <div>{{ decryptedWorld }}</div>
  </div>
</template>

<script>
import CryptoJS from 'crypto-js';
import encryptedTexts from './encrypted-texts.json';

export default {
  data() {
    return {
      decryptedHello: '',
      decryptedWorld: ''
    };
  },
  created() {
    this.decryptText('hello');
    this.decryptText('world');
  },
  methods: {
    decryptText(key) {
      const cipherParams = CryptoJS.lib.CipherParams.create({
        ciphertext: CryptoJS.enc.Base64.parse(encryptedTexts[key])
      });
      const decrypted = CryptoJS.AES.decrypt(
        cipherParams,
        'your-secret-key-123' // 加密时使用的密钥
      );
      this[`decrypted${key.charAt(0).toUpperCase()}${key.slice(1)}`] = decrypted.toString(CryptoJS.enc.Utf8);
    }
  }
};
</script>

注意事项

  • 安全性:确保你的加密密钥安全,并且不要将其硬编码在客户端代码中。
  • 性能:解密操作可能对客户端性能有一定影响,尤其是在解密大量文本时。
  • 同步与异步:如果解密操作较慢,考虑使用异步方法来避免阻塞UI渲染。

这种方法虽然可以实现你的需求,但需要注意管理好密钥和加密数据的安全性。同时,确保加密和解密操作不会成为性能瓶颈。

 类似资料:
  • 这段代码在vue2下不会报错,但是在vue3中 slot的写法变成了v-slot,由于我刚学不久还不会改写求帮忙改写一下。整体的vue文件就是elementui拉下来的一个登录

  • vite 项目混淆加密 怎么配置?下面这样配置会报错caught TypeError: Failed to resolve module specifier "vue". Relative references must start with either "/", "./", or "../". 想要只在生产环境build添加加密,应该怎么写呢?

  • 现在做的是动态编辑菜单 我想给这个菜单添加svg代码用作图标,但是我发现动态添加的svg代码是不会被识别的。 (Icon是自己封装的) 静态的svg代码就可以被识别 动态的就原样的打印出来了

  • 本文向大家介绍asp实现的sha1加密解密代码(和C#兼容),包括了asp实现的sha1加密解密代码(和C#兼容)的使用技巧和注意事项,需要的朋友参考一下 在百度找的几个asp sha1(vbs写的)加密结果和asp.net的sha1加密结果不一样,asp.net sha1加密完后是40位,网上找的asp sha1加密是64位,还以为asp.net做了截取(如网上的asp的md5机密和asp.ne

  • 本文向大家介绍vue实现添加标签demo示例代码,包括了vue实现添加标签demo示例代码的使用技巧和注意事项,需要的朋友参考一下 本篇文章主要介绍vue添加标签,废话不多说了,下面上具体代码 效果如下: html js 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持呐喊教程。

  • 场景是这样子的, 就是我用vite和vue打包后的index.html中,他的meta标签的值是写死的,怎么能在每次打包的时候直接让他异步读取我的项目中接口返回的变量呢? vue3项目