Java实现Js crypto-js加密

使用CryptoJS实现Vue前端加密,Java后台解密的步骤和方法 CryptoJS 是一个 JavaScript 库,提供了一系列密码学函数和工具,用于加密、解密、生成摘要等任务。它支持多种加密算法,包括常见的对称加密算法(如 AES、DES)和非对称加密算法(如 RSA)。同时,CryptoJS还包括了ECB和CBC两种模式,其中ECB模式:全称Electronic Codebook(电码本),在ECB模式中,每个明文分组都被单独加密,且每个明文分组都被加密为相同的密文分组。也就是说,如果两个明文分组相同,那么它们的密文分组也相同。CBC模式。 阅读详情

AES 加密算法采用分组密码体制,每个分组数据的长度为128位16个字节,密钥长度可以是128位16个字节、192位或256位,一共有四种加密模式,我们通常采用需要初始向量 IV 的 CBC 模式,初始向量的长度也是128位16个字节。 AES 加密的五个关键词,分别是:分组密码体制、Padding、密钥、初始向量 IV 和四种加密模式

5.1 分组密码体制 所谓分组密码体制就是指将明文切成一段一段的来加密,然后再把一段一段的密文拼起来形成最终密文的加密方式。AES 采用分组密码体制,即 AES 加密会首先把明文切成一段一段的,而且每段数据的长度要求必须是128位16个字节,如果最后一段不够16个字节了,就需要用 Padding 来把这段数据填满16个字节,然后分别对每段数据进行加密,最后再把每段加密数据拼起来形成最终的密文。

5.2 Padding Padding 就是用来把不满16个字节的分组数据填满16个字节用的,它有三种模式 PKCS5、PKCS7 和NOPADDING。PKCS5 是指分组数据缺少几个字节,就在数据的末尾填充几个字节的几,比如缺少5个字节,就在末尾填充5个字节的5。PKCS7 是指分组数据缺少几个字节,就在数据的末尾填充几个字节的0,比如缺少7个字节,就在末尾填充7个字节的0。NoPadding 是指不需要填充,也就是说数据的发送方肯定会保证最后一段数据也正好是16个字节。那如果在PKCS5 模式下,最后一段数据的内容刚好就是16个16怎么办?那解密端就不知道这一段数据到底是有效数据还是填充数据了,因此对于这种情况,PKCS5 模式会自动帮我们在最后一段数据后再添加16个字节的数据,而且填充数据也是16个16,这样解密段就能知道谁是有效数据谁是填充数据了。PKCS7 最后一段数据的内容是16个0,也是同样的道理。解密端需要使用和加密端同样的 Padding 模式,才能准确的识别有效数据和填充数据。我们开发通常采用 PKCS7 Padding 模式。

5.3 初始向量IV 初始向量 IV 的作用是使加密更加安全可靠,我们使用 AES 加密时需要主动提供初始向量,而且只需要提供一个初始向量就够了,后面每段数据的加密向量都是前面一段的密文。初始向量 IV 的长度规定为128位16个字节,初始向量的来源为随机生成。至于为什么初始向量能使加密更安全可靠,会在下面的加密模式中提到。

5.4 密钥 AES 要求密钥的长度可以是128位16个字节、192位或者256位,位数越高,加密强度自然越大,但是加密的效率自然会低一些,因此要做好衡量。我们开发通常采用128位16个字节的密钥,我们使用 AES 加密时需要主动提供密钥,而且只需要提供一个密钥就够了,每段数据加密使用的都是这一个密钥,密钥来源为随机生成(我们开发时传入的那个为初始密钥,除了初始密钥以外,后面每一轮的密钥都是由上一轮的密钥扩展而来的,密钥扩展有四个步骤:排列、置换、与轮常量异或、生成下一轮密钥的其他列)。

5.5 四种加密模式 AES 一共有四种加密模式,分别是 ECB(电子密码本模式)、CBC(密码分组链接模式)、CFB、OFB,我们一般使用的是 CBC 模式。四种模式中除了 ECB 相对不安全之外,其它三种模式的区别并没有那么大(ECB 模式是最基本的加密模式,即仅仅使用明文和密钥来加密数据,相同的明文块会被加密成相同的密文块,这样明文和密文的结构将是完全一样的,就会更容易被破解,相对来说不是那么安全,因此很少使用,而 CBC 模式则比 ECB 模式多了一个初始向量 IV,加密的时候,第一个明文块会首先和初始向量 IV 做异或操作,然后再经过密钥加密,然后第一个密文块又会作为第二个明文块的加密向量来异或,依次类推下去,这样相同的明文块加密出的密文块就是不同的,明文的结构和密文的结构也将是不同的,因此更加安全,我们常用的就是 CBC 加密模式)。 原文链接:https://blog.youkuaiyun.com/u014294681/article/details/86690241
1.AES硬编码密钥

package org.jeecg.modules.util;

import lombok.extern.slf4j.Slf4j;

import javax.crypto.Cipher;
import javax.crypto.spec.SecretKeySpec;
import java.security.Key;
import java.util.Base64;

@Slf4j
public class AESUtils {
    private static final String ALGORITHM = "AES";
    private static final int KEY_SIZE = 128;
    private static final String TRANSFORMATION = ALGORITHM + "/ECB/PKCS5Padding";

    //加密
    public static String encrypt(String data, String key) throws Exception {
        log.info("加密前的数据:{}", data);
        // 使用平台默认的字符集进行转换,但在生产环境中,为了确保跨平台的一致性,建议显式指定字符集,例如使用 getBytes(StandardCharsets.UTF_8)
        Key secretKey = new SecretKeySpec(key.getBytes(), ALGORITHM);
        Cipher cipher = Cipher.getInstance(TRANSFORMATION);
        cipher.init(Cipher.ENCRYPT_MODE, secretKey);
        // 解决加密中文乱码问题
        byte[] encryptedBytes = cipher.doFinal(data.getBytes(StandardCharsets.UTF_8));
        log.info("加密后的数据:{}", Base64.getEncoder().encodeToString(encryptedBytes));
        return Base64.getEncoder().encodeToString(encryptedBytes);
    }

    //解密
    public static String decrypt(String encryptedData, String key) throws Exception {
        log.info("解密前的数据:{}", encryptedData);
        // 使用平台默认的字符集进行转换,但在生产环境中,为了确保跨平台的一致性,建议显式指定字符集,例如使用 getBytes(StandardCharsets.UTF_8)
        Key secretKey = new SecretKeySpec(key.getBytes(), ALGORITHM);
        Cipher cipher = Cipher.getInstance(TRANSFORMATION);
        cipher.init(Cipher.DECRYPT_MODE, secretKey);
        byte[] decodedBytes = Base64.getDecoder().decode(encryptedData);
        byte[] decryptedBytes = cipher.doFinal(decodedBytes);
        log.info("解密后的数据:{}", new String(decryptedBytes));
        // 解决中文乱码问题
        return new String(decryptedBytes, StandardCharsets.UTF_8);
    }

    public static void main(String[] args) throws Exception {
//        String str = "6It99ux/BK2oQlY4PVqgsC0HCuWTLqBkIPrWDqEgh9k9ri3P32NzY86/dMWal/HTtcN75gRwXxZLK/0d+bs88BHLCULS49M5Zv7IkiVRbyAIYth+tctCockmhDL0WH1XE5DPthVmLnIMB9QCC0vl4Q==";
//        System.out.println(decrypt(str, "5ff7db748e8397825ff7db748e839782"));
//        System.out.println("encrypt(\"[]\", KEY) = " + encrypt("[]", "5ff7db748e8397825ff7db748e839782"));

        String str1 = "[{\"cndData\":{},\"limit\":20,\"params\":{\"ageBgn\":null,\"ageEnd\":null,\"dtBgn\":[\"2024-07-22 00:00:00\",\"2024-07-22 23:59:59\"],\"naDiag\":null,\"naPi\":\"蔡昱铭\",\"sdTpl\":\"2\"},\"sort\":null,\"start\":0}]";
        String encrypt1 = encrypt(str1, "5ff7db748e8397825ff7db748e839782");
        System.out.println(encrypt1);

        String str2 = "E4mJq1NcvNWNvdro4HMo8DkoHBRcokjwKJHMQsnXnyahweY+gYlQQOmAFdlwp7vDCI57FWtOjDHBAxbbLUkaYop5vNXU4jQVvsCK7uuHuuS3v8TIKJytwkUe4/KBadAuSzMSWDUjsp8y6ZWFdIqnfqBbnOFZLQxP/pdzKdXmofURriu9C+0JmVR5nEZyC4LSQLCEahRGyT+JB76Nq8H8ZOvDZx7mm06Xur7cDnD8sn4VmaIHaU+MSqUqdk450kU0";
        String decrypt1 = decrypt(str2, "5ff7db748e8397825ff7db748e839782");
        System.out.println(decrypt1);
    }
}

2.AES使用SecureRandom生成随机密钥

package org.jeecg.common.util;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;

import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import java.security.Key;
import java.security.SecureRandom;

@Component
public class AESUtils {

    private static Key key;

    public static String keyStr;
    private static String CHARSETNAME = "UTF-8";
    private static String ALGORITHM = "AES";


    @Value("${encrypt.key:NmehU6NWTkk6E}")
    public void setKeyStr(String keyStr) {
        DBAesUtil.keyStr = keyStr;
        try {
            //生成DES算法对象
            KeyGenerator generator = KeyGenerator.getInstance(ALGORITHM);
            //运用SHA1安全策略
            SecureRandom secureRandom = SecureRandom.getInstance("SHA1PRNG");
            //设置上密钥种子
            secureRandom.setSeed(DBAesUtil.keyStr.getBytes());
            //初始化基于SHA1的算法对象
            generator.init(secureRandom);
            //生成密钥对象
            key = generator.generateKey();
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }
    /***
     * 获取加密的信息
     * @param str
     * @return
     */
    public static String getEncryptString(String str) {
        //基于BASE64编码,接收byte[]并转换成String
        BASE64Encoder encoder = new BASE64Encoder();
        try {
            //按utf8编码
            byte[] bytes = str.getBytes(CHARSETNAME);
            //获取加密对象
            Cipher cipher = Cipher.getInstance(ALGORITHM);
            //初始化密码信息
            cipher.init(Cipher.ENCRYPT_MODE, key);
            //加密
            byte[] doFinal = cipher.doFinal(bytes);
            //byte[]to encode好的String 并返回
            return encoder.encode(doFinal);
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }


    /***
     * 获取解密之后的信息
     * @param str
     * @return
     */
    public static String getDecryptString(String str) {
        BASE64Decoder decoder = new BASE64Decoder();
        try {
            //将字符串decode成byte[]
            byte[] bytes = decoder.decodeBuffer(str);
            //获取解密对象
            Cipher cipher = Cipher.getInstance(ALGORITHM);
            //初始化解密信息
            cipher.init(Cipher.DECRYPT_MODE, key);
            //解密
            byte[] doFial = cipher.doFinal(bytes);

            return new String(doFial, CHARSETNAME);

        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }
}

3.DES示例
DES算法的入口参数有三个:Key、Data、Mode。 Key 是 DES 算法的工作密钥。 Data 是要被加密或被解密的数据。 Mode 为 DES 的工作方式,有两种:加密或解密。

import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;
import java.nio.charset.StandardCharsets;
import java.security.Key;
import java.security.SecureRandom;
import java.util.Base64;

public class DESExample {

    public static void main(String[] args) throws Exception {
        // 生成DES密钥
        Key secretKey = generateDESKey();

        // 原始数据
        String originalData = "Hello, DES!";
        System.out.println("原始数据: " + originalData);

        // 加密
        String encryptedData = encrypt(originalData, secretKey);
        System.out.println("加密后数据: " + encryptedData);

        // 解密
        String decryptedData = decrypt(encryptedData, secretKey);
        System.out.println("解密后数据: " + decryptedData);
    }

    /**
     * 生成DES密钥
     */
    public static Key generateDESKey() throws Exception {
        KeyGenerator keyGenerator = KeyGenerator.getInstance("DES");
        keyGenerator.init(new SecureRandom());
        SecretKey secretKey = keyGenerator.generateKey();
        return secretKey;
    }

    /**
     * 加密方法
     */
    public static String encrypt(String data, Key key) throws Exception {
        Cipher cipher = Cipher.getInstance("DES");
        cipher.init(Cipher.ENCRYPT_MODE, key);
        byte[] encryptedBytes = cipher.doFinal(data.getBytes(StandardCharsets.UTF_8));
        return Base64.getEncoder().encodeToString(encryptedBytes);
    }

    /**
     * 解密方法
     */
    public static String decrypt(String data, Key key) throws Exception {
        byte[] decodedBytes = Base64.getDecoder().decode(data);
        Cipher cipher = Cipher.getInstance("DES");
        cipher.init(Cipher.DECRYPT_MODE, key);
        byte[] decryptedBytes = cipher.doFinal(decodedBytes);
        return new String(decryptedBytes, StandardCharsets.UTF_8);
    }
}

首先使用KeyGenerator生成了一个DES密钥。然后,我们定义了两个方法:encrypt用于加密明文数据,decrypt用于解密密文数据。这两个方法都使用了Cipher类,并通过指定加密模式(Cipher.ENCRYPT_MODE或Cipher.DECRYPT_MODE)和密钥来初始化它。加密后的数据被转换为Base64编码的字符串,以便以文本形式显示和存储。解密时,我们首先对Base64编码的数据进行解码,然后再使用Cipher进行解密操作。

uniapp AES 加密解密 ‌URL参数解码‌:在处理URL参数时,经常需要对参数进行编码和解码。‌表单数据解码‌:在处理表单提交的数据时,表单数据通常需要进行编码。‌  替代方案和兼容性:由于JavaScript中没有内置的URLDecoder类,通常使用decodeURIComponent作为替代方案。‌  ‌URL参数解码‌:在处理URL参数时,经常需要对参数进行编码和解码。‌  ‌表单数据解码‌:在处理表单提交的数据时,表单数据通常需要进行编码。使用decodeURIComponent可以将编码后的数据解码回原始形式。 阅读详情

相关推荐

关于DES算法的介绍及其实现(JS)

DES算法的概念网上很多资料,不再赘述。https://blog.youkuaiyun.com/m0_37962600/article/details/79912654 这里DES算法所涉及的诸多概念,最后第四节介绍用JAVA和JavaScript实现des算法 一、DES和3DES的区别 DES:主要采用替换和移位的方法,用56位密钥对64位二进制数据块进行加密,每次加密可对64位的输入数据进行16轮...

贾轶凡(Java) 1494

java前后端加密解密crypto-js

适用于接口数据敏感信息,比如 明文传输姓名、居住地址、手机号等信息,如果存在明文传输敏感数据问题、数据泄漏风险,即可使用此方法加密解密解决。

myyw001的博客 1万+

Java与JavaScript跨平台DES加密解密实战详解

Java加密体系结构(JCA)是整个 Java 安全框架的核心组成部分之一,它不仅定义了加密服务的标准接口,还通过 Provider 模型实现了算法实现的插拔式管理。这种设计极大提升了系统的灵活性和安全性,允许开发人员在运行时动态选择不同的加密提供商(如 SunJCE、Bouncy Castle),而无需修改业务逻辑代码。填充机制用于处理最后一块不足8字节的数据。crypto-js支持多种填充方式:填充方式常量说明PKCS#7添加n个值为n的字节(最常用)

weixin_42466723的博客 1079

前端CryptoJS和Java后端数据互相加解密(AES)

前端CryptoJS与Java后端实现数据AES对称加密,有哪些不明白的地方嘞,一起来看下这篇文章吧!

lingbomanbu_lyl的博客 1万+

CryptoJS+Java前后台加解密

亲测可用。前后端,通过代码生成加密和解密。javascript可以解密和加密,反之,后端java代码可以加密和解密。包中有详细说明和例子代码。保证可以正确运行。

CryptoJS v3.1.2+Java前后台加解密

亲测可用。前后端,通过代码生成加密和解密。javascript可以解密和加密,反之,后端java代码可以加密和解密。包中有详细说明和例子代码。保证可以正确运行。

前端vue使用crypto.js加密Java后端解密

vue 安装crypto.js cnpm install crypto-js --save ECB:是一种基础的加密方式,密文被分割成分组长度相等的块(不足补齐),然后单独一个个加密,一个个输出组成密文。 CBC:是一种循环模式,前一个分组的密文和当前分组的明文异或或操作后再加密,这样做的目的是增强破解难度。(不容易主动攻击,安全性好于ECB,是SSL、IPSec的标准) ESB模式 1.前端js const CryptoJS = require('crypto-js') // 引用AES源码js cons

hj_001的博客 2415

K-L展开 (Karhunen-Loeve expansion)

K-L变换

susan_wang1的博客 2万+

java aes javascript_AES javascript加密和Java解密

我已经在javascrypt中实现了RSA加密,在java中实现了RSA解密,这只是一个简单的过程。 但是我要加密大量数据的问题,这是RSA一次性无法实现的,要么我必须分割要加密的数据(这会使过程复杂化),要么使用带RSA加密和解密的AES 。 所以我选择使用RSA加密和解密的AES。这是我使用Crypto-js的javascript代码varsecretPass=CryptoJS.lib....

weixin_34809884的博客 295

python实现语音信号的分帧、加窗、预处理

语音信号实现分帧、加窗、预处理音频文件读取预加重分帧加窗 音频文件读取 librosa是非常强大的python语音信号处理库。 读取音频: 使用语句librosa.load(path, sr=22050, mono=True, offset=0.0, duration=None)读取音频文件,默认的采样率是22050,若要保留音频的原始采样率,使用sr=None。 其中: path:表示音频文件的路径 sr:表示采样率 mono:bool,是布尔类型,表示是否将信号转换为单声道 offset:float,后

weixin_45272908的博客 1万+

Ubuntu终端AI编程助手配置:Claude Code接入DeepSeek模型全攻略

在软件开发领域,AI编程助手正成为提升开发效率的重要工具。其核心原理是通过大语言模型理解自然语言指令,生成、解释或调试代码。这类工具的技术价值在于将AI能力无缝集成到开发工作流中,减少上下文切换,实现更流畅的人机协作。常见的应用场景包括代码生成、错误调试、代码重构和技术问答等。本文聚焦于在Ubuntu系统中,将流行的终端AI助手Claude Code的后端模型从原版Claude替换为DeepSeek。通过配置环境变量实现API端点和模型的映射,这一过程涉及Node.js环境管理、npm包安装和关键环境变量设

weixin_42527654的博客 378

js 加密 crypto-js des加密

js 加密 crypto-js https://www.npmjs.com/package/crypto-js DES 举例: js 引入: <script src="/js/plugins/crypto/crypto-js.js"></script><script src="/js/plugins/crypto/tripledes.js">&l...

WindWant 95

GN算法边介数计算优化指南:如何提升大规模社交网络分析效率

本文深入探讨了GN算法在大规模社交网络分析中的核心瓶颈——边介数计算,并提供了从算法优化到工程部署的完整性能提升方案。通过引入Brandes算法、并行计算、增量更新及分布式处理等策略,有效解决了传统GN算法在处理百万级网络时效率低下的问题,为社交网络社区划分等实际应用提供了高效解决方案。

weixin_29196613的博客 486

对称加密算法之Java与Js算法互通应用

欢迎大家关注本博,同时欢迎大家评论交流,可以给个赞哦!!!   场景分析:   在实际应用过程中,往往存在多语言交互的需求,比如今天所属的Java-Js间的3DES加解密互通问题。之前工作中,曾经遇到过类似这样的需求,JS端加密传输信息至Java服务端,Java解密信息进行应用,在进行很多次尝试之后,终于调通了。   Js端使用Crypto-JS工具集,Java端使用本博《对称加密算法之Java 3DES算法应用》 提供的工具类。   交互约定:   · 交互秘钥:ABCDEFGHIJKLMNOPQRS.

键盘上流淌的日子 4297

2011-2024年间各省数字普惠金融指数数据(覆盖广度、使用深度和数字化程度)

2、指标:数字金融普惠指数、数字金融覆盖广度指数、数字金融使用深度指数、普惠金融数字化程度指数、数字金融使用深度指数下属的支付、保险、货币基金、信用服务、投资、信贷等分类指数。中国各省的数字普惠金融指数数据,从数字金融覆盖广度、数字金融使用深度和普惠金融数字化程度3个维度来构建数字普惠金融指标体系。数字普惠金融指数一共3个维度、33项具体指标。全套指数包含数字金融覆盖广度指数、数字金融使用深度指数和普惠金融数字化程度指数,以及数字金融使用深度指数下属的支付、保险、货币基金、信用服务、投资、信贷等分类指数。

【优快云】 1万+

6、探索音乐结构中的统一性:贝多芬《英雄交响曲》第一乐章的深度剖析

本文深入剖析了贝多芬《英雄交响曲》第一乐章的音乐结构,探讨其统一性的来源及表现形式。通过主题与动机、和声与调性、旋律与节奏、织体与动态等多方面的分析,揭示了这部作品在技术层面和情感表达上的卓越成就。

b9c0d的博客 518

Javascript中的AES加密和Java中的解密

AES代表高级加密系统,它是一种对称加密算法,很多时候我们需要在客户端加密一些纯文本(例如密码)并将其发送到服务器,然后由服务器解密以进行进一步处理.AES加密和解密更加容易可以在同一平台(例如Android客户端和Java服务器)中实现,但是有时在跨平台环境(例如Java客户端和Java Server)(例如spring mvc框架)中解密AES加密密码变得颇具挑战性,因为如果任何系统默认...

最佳 Java 编程 1286

EUV光源技术路线深度解析

EUV光刻技术的关键瓶颈在于13.5纳米光源的稳定高效获取。主流技术路线从DPP放电等离子体发展为LPP激光等离子体方案,后者通过激光轰击锡液滴实现更高功率输出。新出现的LDP技术综合激光预热与放电优势,虽功率扩展性有限,但为光源技术提供了有益补充。目前LPP仍是唯一通过量产验证的方案,而LDP可能作为过渡技术应用于特定场景。EUV光源的发展实质是能量转化效率与系统可靠性的持续优化过程,各种技术路线的探索共同推动着这一核心工艺的进步。

硬核科技 556

Nodyn核心API手册:从Buffer到Crypto模块的全面解析

Nodyn是一个运行在JVM上的Node.js兼容框架,它允许开发者使用Node.js API编写应用程序,同时利用Java虚拟机的强大功能。本手册将全面解析Nodyn的核心API,重点介绍Buffer与Crypto模块的使用方法,帮助开发者快速掌握这两个关键模块的功能和应用场景。 ## Buffer模块:数据处理的基石 Buffer模块是Nodyn中用于处理二进制数据的核心组件,它为开发者提

gitblog_00101的博客 964

乐企增值税及附加税费(一般纳税人适用)申报表填报能力说明文档V3.009

申报表填报,是指企业在自有业务系统中将算税结果数据按预填规则要求加工汇总后,进行申报表填报的过程。申报表填报前对纳税申报所需的前提条件进行校验。校验通过后,应用前序算税结果数据及预填规则进行纳税申报表预填,生成申报表数据。申报表数据通过申报业务规则校验后,经纳税人确认即完成申报表填报业务。

记录点滴 345

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

js(CryptoJs)前端加密和后端解密

一.前台加密,需要引入crypto-js.js库: &lt;!DOCTYPE html&gt; &lt;html&gt;     &lt;head&gt;         &lt;meta charset="UTF-8"&gt;         &lt;title&gt;jsencrypt的使用&lt;/title&gt;         &lt;script src="js

向着高亮的地方 9688

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

SM2加密 js+java

sm2加密 后端代码好说,主要是前端js加密代码,困扰了很长时间,在此记录一下。本来想粘代码的 但是csdn保存不了。工具类(从别处引荐的轮子)js代码(两个文件)

qq_44985319的博客 1326

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

Java端和JS端的AES加密解密同步

Java端和JS端的AES加密算法同步 公司要求登录时用户名和密码必须先加密,再将数据发送到服务器。由于这种加密必须要求是可逆的,所以不能用MD5来加密,MD5不是可逆的。后台选择了用AES加密。然后问题就是如何跟公司的Java算法得到同样的结果。 后来在搜寻了很多算法后,发现了解决方案,改动公司的算法,然后就可以轻松匹配了。 • Java端的算法:import javax.crypto.Ci

black_dreamer的专栏 1万+

JavaScript + Java 实现AES对称加密(AESUtils工具类)

AESUtils工具类; key 是密钥 ,iv 是密钥偏移量,对称解密使用的算法是 AES-128-CBC算法,数据采用 Pkcs7填充 , key 需要为16位,约定密钥要与后端协定一致。

7c 4186

前端对称加密--DES加密

转载自:http://blog.youkuaiyun.com/frankcheng5143/article/details/52078764 在网上有很多DES加密的js版,有一些是用Java解密不成功的,今天分享一个前端用js的DES加密,后端使用java版的DES解密 因为要在后台进行解密,所以采用对称加密。 对称加密可以选择很多,这里选择的DES加密。 前端采用谷歌的crypto

wmy94827的博客 4637
上一篇: MySQL 8.0.23 源码安装
下一篇: Base64加密原理
和月明
博客等级 码龄6年 214粉丝 51原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值