JS base64编码加解密、JS编码转换

国密SM4前后端加解密实战:JavaScript与Java互通避坑指南 本文深入剖析了国密SM4算法在JavaScript前端与Java后端加解密互通时常见的“坑”,如字符编码、字节数组转换、Base64处理等核心差异。通过提供经过验证的代码示例和系统性排查指南,旨在帮助开发者构建稳定、一致的跨语言SM4加解密方案,确保金融、政务等高安全要求场景的数据安全。 阅读详情
<script language="javascript">
    var base64encodechars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
    var base64decodechars = new Array(
    -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
    -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
    -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 62, -1, -1, -1, 63,
    52, 53, 54, 55, 56, 57, 58, 59, 60, 61, -1, -1, -1, -1, -1, -1,
    -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
    15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, -1, -1, -1, -1, -1,
    -1, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40,
    41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, -1, -1, -1, -1, -1);

    function base64encode(str) {
        var out, i, len;
        var c1, c2, c3;
        len = str.length;
        i = 0;
        out = "";
        while (i < len) {
            c1 = str.charCodeAt(i++) & 0xff;
            if (i == len) {
                out += base64encodechars.charAt(c1 >> 2);
                out += base64encodechars.charAt((c1 & 0x3) << 4);
                out += "==";
                break;
            }
            c2 = str.charCodeAt(i++);
            if (i == len) {
                out += base64encodechars.charAt(c1 >> 2);
                out += base64encodechars.charAt(((c1 & 0x3) << 4) | ((c2 & 0xf0) >> 4));
                out += base64encodechars.charAt((c2 & 0xf) << 2);
                out += "=";
                break;
            }
            c3 = str.charCodeAt(i++);
            out += base64encodechars.charAt(c1 >> 2);
            out += base64encodechars.charAt(((c1 & 0x3) << 4) | ((c2 & 0xf0) >> 4));
            out += base64encodechars.charAt(((c2 & 0xf) << 2) | ((c3 & 0xc0) >> 6));
            out += base64encodechars.charAt(c3 & 0x3f);
        }
        return out;
    }
    function base64decode(str) {
        var c1, c2, c3, c4;
        var i, len, out;

        len = str.length;

        i = 0;
        out = "";
        while (i < len) {
           
            do {
                c1 = base64decodechars[str.charCodeAt(i++) & 0xff];
            } while (i < len && c1 == -1);
            if (c1 == -1)
                break;

           
            do {
                c2 = base64decodechars[str.charCodeAt(i++) & 0xff];
            } while (i < len && c2 == -1);
            if (c2 == -1)
                break;

            out += String.fromCharCode((c1 << 2) | ((c2 & 0x30) >> 4));

           
            do {
                c3 = str.charCodeAt(i++) & 0xff;
                if (c3 == 61)
                    return out;
                c3 = base64decodechars[c3];
            } while (i < len && c3 == -1);
            if (c3 == -1)
                break;

            out += String.fromCharCode(((c2 & 0xf) << 4) | ((c3 & 0x3c) >> 2));

           
            do {
                c4 = str.charCodeAt(i++) & 0xff;
                if (c4 == 61)
                    return out;
                c4 = base64decodechars[c4];
            } while (i < len && c4 == -1);
            if (c4 == -1)
                break;
            out += String.fromCharCode(((c3 & 0x03) << 6) | c4);
        }
        return out;
    }

    function utf16to8(str) {
        var out, i, len, c;
        out = "";
        len = str.length;
        for (i = 0; i < len; i++) {
            c = str.charCodeAt(i);
            if ((c >= 0x0001) && (c <= 0x007f)) {
                out += str.charAt(i);
            } else if (c > 0x07ff) {
                out += String.fromCharCode(0xe0 | ((c >> 12) & 0x0f));
                out += String.fromCharCode(0x80 | ((c >> 6) & 0x3f));
                out += String.fromCharCode(0x80 | ((c >> 0) & 0x3f));
            } else {
                out += String.fromCharCode(0xc0 | ((c >> 6) & 0x1f));
                out += String.fromCharCode(0x80 | ((c >> 0) & 0x3f));
            }
        }
        return out;
    }

    function utf8to16(str) {
        var out, i, len, c;
        var char2, char3;

        out = "";
        len = str.length;
        i = 0;
        while (i < len) {
            c = str.charCodeAt(i++);
            switch (c >> 4) {
                case 0: case 1: case 2: case 3: case 4: case 5: case 6: case 7:
                    // 0xxxxxxx
                    out += str.charAt(i - 1);
                    break;
                case 12: case 13:
                    // 110x xxxx   10xx xxxx
                    char2 = str.charCodeAt(i++);
                    out += String.fromCharCode(((c & 0x1f) << 6) | (char2 & 0x3f));
                    break;
                case 14:
                    // 1110 xxxx  10xx xxxx  10xx xxxx
                    char2 = str.charCodeAt(i++);
                    char3 = str.charCodeAt(i++);
                    out += String.fromCharCode(((c & 0x0f) << 12) |
                       ((char2 & 0x3f) << 6) |
                       ((char3 & 0x3f) << 0));
                    break;
            }
        }

        return out;
    }

    function doit() {
        var f = document.f
        f.output.value = base64encode(utf16to8(f.source.value))
        f.decode.value = utf8to16(base64decode(f.output.value))
    }
</script>

Java与JS前后端联调:加密编码算法实战指南 在前后端联调中,编码与加密是两个极易混淆的基础概念。编码如Base64、Hex只是数据的可逆表达转换,负责传输与展示;而加密则是对数据上锁,确保机密性与完整性。对于Java和JavaScript开发者而言,理清AES、RSA、BCrypt等算法的适用场景,是构建安全接口的必备技能。对称加密AES-GCM凭借高效与自带完整性校验的优势,已成为跨语言联调的主流选择;非对称加密RSA适合密钥交换与数字签名;密码存储则推荐使用BCrypt这类慢哈希算法。实际开发中,密钥、IV、填充模式及字符集的一致性,往往是联调失 阅读详情

相关推荐

Python_构建同花顺问财智能选股API服务

本文详细介绍了如何使用Python构建同花顺问财智能选股API服务,涵盖从环境准备、核心API开发到高级功能扩展的全过程。通过Flask框架和pywencai库,开发者可以快速搭建稳定可靠的选股接口,实现自动化股票筛选与交易系统集成,提升量化投资效率。

weixin_30596343的博客 330

【Js】js前端hash加密库Crypto-js进行MD5/SHA256/SHA512加密的方法

RIPEMD是一系列哈希函数,包括RIPEMD-128、RIPEMD-160、RIPEMD-256和RIPEMD-320等变种,分别生成128位、160位、256位和320位的哈希值。:SHA-2系列是SHA-1的继任者,包括SHA-256、SHA-384和SHA-512等不同变种,分别生成256位、384位和512位的哈希值。:哈希函数应该尽可能避免产生碰撞,即不同的输入数据生成相同的哈希值的情况。:哈希函数会将任意大小的输入数据映射到固定大小的输出,无论输入数据的大小如何,输出长度是固定的。

良月柒 7302

别再只盯着YOLOv8了!手把手带你用PaddleDetection的PP-YOLOE+搞定你的第一个检测项目

本文介绍了PP-YOLOE+在目标检测领域的优势与应用实践,对比YOLOv8展示其在精度、速度和部署便利性上的突破。通过详细的代码示例和实战教程,帮助开发者快速上手PaddleDetection工具链,实现产业级目标检测项目,提升开发效率。

weixin_42701915的博客 185

【JS】实现 Base64 编码和解码(及中文乱码问题)

项目中实现 Base64 编码和解码

qq_45677671的博客 2万+

记录Nvidia AGX Orin的配置日常(二)设置上电自动开机和远程桌面

因为要拿AGX作为机器人的主控板,所以需要给他设置一下通电后无需按电源键就自动开机,然后再配置一下远程桌面。

AutomaticForever的博客 1361

MinerU 系列教程 第六课:VLM 后端 - 视觉语言模型的力量

本篇教程将深入 VLM 后端的端到端推理架构。在上一课中我们看到 Pipeline 后端如何用 7+ 个专用模型组成流水线,本课将展示一种截然不同的设计理念 —— 用一个视觉语言模型(VLM)完成所有识别任务。你将了解 6 种推理引擎的选择与配置、MinerUClient 统一接口、二步提取策略,以及 VLM 原始输出如何转换为 MinerU 的标准 Middle JSON 格式。

weixin_43674738的博客 205

js加密解密base64

在JavaScript中,可以使用内置的btoa()函数进行Base64编码,用atob()函数进行Base64解码。

前端工程师 · Vue 生态深耕者,专注多端与工程化 3531

基于 YOLOv26 的食品包装缺陷检测系统:智能视觉质检方案

本文提出了一种基于YOLOv26深度学习的食品包装缺陷智能检测系统。该系统能够自动识别多种常见包装缺陷,包括密封不良、破损、污染、标签错误等8类问题。相比传统人工检测方法,该系统具有高精度、多类别分类、实时推理等优势。文章详细介绍了系统架构,包含数据采集、预处理、YOLOv26检测模型和后处理四个核心模块,并提供了完整的环境配置和数据处理代码实现。该系统为食品包装行业提供了一种高效、准确的智能视觉质检解决方案。

一键难忘的博客 683

js实现base64加密与解密

本文主要介绍JavaScript中使用btoa()和atob()内置函数进行Base64编码与解码的基本方法,以及如何通过CryptoJS库进行加密与解密。

weixin_48839391的博客 3310

CodeQL查询时遇到报错:A fatal error occurred: Could not process query metadata for...如何解决?

🏆本文收录于 《全栈Bug调优(实战版)》 专栏,该专栏专注于分享我在真实项目开发中遇到的各类疑难Bug及其深层成因,并系统提供高效、可复现的解决思路和实操方案。无论你是刚入行的新手开发者,还是拥有多年项目经验的资深工程师,本专栏都将为你提供一条系统化、高质量的问题排查与优化路径,助力你加速成长,攻克技术壁垒,迈向技术价值最大化与职业发展的更高峰🚀!

**My Coding Family** 1083

【AI大模型应用开发】【LangChain系列】实战案例6:利用大模型进行文本总结的方法探索,文本Token超限怎么办?

假设有一组文档(PDF、Notion页面、客户问题等),你想要总结内容。可以利用大模型来帮你。今天来系统看下利用大模型来对文本进行总结的方法,以LangChain的使用为例。

同学小张的博客 3749

JS基于base64编码加密解密文本和图片(修订)

JS基于base64编码加密解密文本和图片。比较实用。

cnds123的专栏 5808

ABAP 百科全书的阅读目录(2024版)

909 篇 ABAP 技术文章的目录

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 4244

des加解密(JavaScript&Java)

前言:刚学h5没多久,感觉吧比android难多了啊,特别是适配,真尼玛苦逼啊,不过h5的大牛还是很多的,毕竟这么多年了,随便一搜就一大堆,正是因为这样,今天刚好后台需要用des对称加密传输数据,然后就上网一搜,真尼玛一大堆啊,最后找到了一个叫crypto-js的库,down下来的时候不会用,尼玛尴尬了,于是就当笔记记下来了,大牛勿喷~!先附上官方git链接:https://github.com/b

vv_bug 1万+

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

前端如何加密数据--五种方式(base64加密、md5加密、sha1加密、字符串方法加密、AES加密)

4.字符串的编码和解码(JS函数的escape()和unescape())--对于汉字,数字不适用。字符串转换为base64:str64 = window.btoa(str)base64转换为字符串:str=window.atob(str64)1.base64加密。

weixin_45096939的博客 6006

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

Nbed64.JS 库分享 一款非常强大的、通用的加密、解密库

gitHub动态加解密API组对称加解密API组标准Base64编解码API组*备注:动态加密是(传统)对称加密的升级版,但本质上,它还是对称加密,但它比传统的对称加密更加安全可靠。如果您对此有研究兴趣,请您移步 *[动态加密的作用和原理]了解更多详情。nbed64StringEncryptEx() nbed64StringDecryptEx() nbed64BinaryEncryptEx() nbed64BinaryDecryptEx() nbed64StringEncrypt() nbed64Strin

qq_16661383的博客 787

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

5个crypto-js调试技巧:快速解决加密问题

crypto-js是一个强大的JavaScript加密标准库,提供了丰富的加密算法实现。在使用过程中,开发者常常会遇到各种加密问题。本文将分享5个实用的调试技巧,帮助你快速定位并解决crypto-js相关的加密难题。 ## 1. 利用测试页面进行基础验证 🧪 项目提供了完整的测试套件,通过test/test.html可以快速验证加密功能是否正常工作。该页面加载了所有核心加密模块和测试脚本,能

gitblog_00121的博客 499

js使用base64加解密

使用base64加解密代码如下: //BASE64加解密 function Base64() { // private property _keyStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="; // public method for encoding ...

罗毅豪的博客 73

js调用Java实现AEC加解密,以及Java的AEC加解密

java和js aec加解密,支持安卓,lua

小码农_胥大的博客 902

RSA加解密实战:Java与JavaScript跨语言协同开发指南

非对称加密是现代信息安全的核心技术之一,它通过公钥和私钥的配对机制,解决了对称加密中密钥分发的难题。其基本原理是利用数学上的单向函数,使得用公钥加密的数据只能用对应的私钥解密,从而确保了数据传输的机密性和身份验证的可靠性。这项技术在保障数据安全方面具有重要价值,广泛应用于HTTPS/TLS协议、API接口签名、数字证书、敏感信息加密等场景。在实际工程实践中,开发者常面临跨语言环境协同的挑战,例如Java后端与JavaScript前端之间的RSA加解密对接。本文聚焦于解决此类实战问题,针对密钥格式不匹配、数据

weixin_30535843的博客 408

先用AES加密,再用base64加密

查了很多资料,总结出下面一份,只求自己以后用的方便 var pwd=&amp;quot;huanhuan&amp;quot;; //密钥(解密时需要输入) function Encrypt(word){ return CryptoJS.AES.encrypt(word,pwd).toString(); } var mm = Encrypt(&amp;quot;123&amp;quot;); //123是需要加密的密码 console.l

小胡仙的博客 3000

CyberChef 在线加解密工具入门:从 Base64 解码到本地部署

手上有一段 Base64 编码的日志、一串看不懂的十六进制数据,或者一段需要还原的加密内容,CyberChef 是一个适合直接上手使用的在线数据处理工具。它由英国 GCHQ 开源维护,把加密、解码、压缩、哈希、协议解析等操作拆成一个个可拖拽的模块,在浏览器里输入数据后就能实时看到处理结果,而且整个过程中数据不离开你的电脑。 ## 先看一个典型场景:还原一段被编码的日志 假设你从日志里截到一行看

gitblog_00452的博客 429

前端DES加解密实战:crypto-js库核心用法与安全实践

对称加密是保障数据传输机密性的基础技术,其核心原理是使用同一密钥进行加密和解密。DES(数据加密标准)作为经典的对称加密算法,通过分组加密和密钥调度实现数据保护。尽管其安全性在现代算力下已显不足,但在处理遗留系统对接、特定行业协议等场景中仍有技术价值。在前端工程实践中,借助crypto-js等成熟库,开发者可以便捷地实现DES加解密,用于敏感信息传输前的本地处理。本文聚焦于crypto-js库中DES算法的实战应用,详细解析密钥处理、加密模式、填充方式等核心参数,并提供完整的加解密流程代码示例,帮助开发者高

weixin_28715953的博客 285

JSEncrypt的长文本分段加解密

JSEncrypt长字符串加解密

wph06rj的专栏 2582

5个必知场景:为什么CyberChef是你不可错过的数据处理工具

你是否曾面对杂乱的十六进制数据束手无策?或是需要快速验证加密算法的正确性?在网络安全、数据分析和开发调试的日常工作中,复杂的数据处理任务常常成为效率瓶颈。CyberChef——这款被誉为"网络瑞士军刀"的开源工具,正是为解决这些痛点而生。作为一个基于Web的**数据处理工具**,它集成了数百种编码、加密、压缩和数据分析功能,让你无需在多个工具间切换就能完成复杂的数据处理流程。 ## 场景一:网络

gitblog_00186的博客 273

CyberChef 在线加密与数据处理:3分钟跑通,505个操作从Base64到AES

上周工作群里丢来一段Base64字符串,说是编码过的日志,问里面藏了什么。没时间装工具,我打开浏览器找到CyberChef:一个跑在浏览器里的在线加密、解码与数据处理工具。粘贴字符串,拖入From Base64,不到3分钟明文就出来了。 ## 从GCHQ走出来的浏览器加密工具箱 CyberChef 是英国政府通信总局 GCHQ 开源的项目,Apache 2.0 协议,当前版本 11.4.0。它

gitblog_00642的博客 569
上一篇: 模拟qq微博登录
lbjayo
博客等级 码龄19年 9粉丝 11原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lbjayo

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值