看了一下,Crypto-js是支持des-cbc加密的。

Pkcs5是Pkcs7在块大小为8时特殊情况,本质上是一样的。Crypto-js默认padding是Pkcs7,可以直接使用。

给个例子:

#加密,key: testtest iv:abcdefgh

echo message | openssl enc -a -des-cbc -K 7465737474657374 -iv 6162636465666768

#输出:kEiztbNAuirF25k0FAcylA==

//解密

var key = CryptoJS.enc.Utf8.parse('testtest');

var iv = CryptoJS.enc.Utf8.parse('abcdefgh');

CryptoJS.DES.decrypt("kEiztbNAuirF25k0FAcylA==", key, {

iv : iv,

mode: CryptoJS.mode.CBC, //可省略

padding: CryptoJS.pad.Pkcs7 //可省略

}).toString(CryptoJS.enc.Utf8);

//输出:message

回答你评论中的问题。

首先,你这里des加密出来的结果,是用base64编码表示的,base64编码里,合法字符范围是[A-Za-z0-9+=/],空格根本就不是合法字符,是不应该出现的。所以不是Cryptojs的问题。

那么到底是哪里出了问题呢,首先来看看你给的第一端密文:

echo DrXWLKRt5byd6XcRGCk66G3BEQ0V7KA9gVZl0kaj/2WK9T+wWarVG7CUtN2H33VDZgVZ3DEuG4O3ja179eyPe6+//9I8w/JxQ2lvLNV4+PaD+in2ltgf3A== | openssl enc -d -a -des-cbc -K 55494a443839486b -iv 3132333435363738 | xxd

#输出

0000000: 5844 4440 0a1f 1f02 3030 3032 3135 3037 XDD@....00021507

0000010: 2e76 6f64 2e6d 7971 636c 6f75 642e 636f .vod.myqcloud.co

0000020: 6d2f 3230 3030 3231 3530 375f 6638 6131 m/200021507_f8a1

0000030: 3733 6134 6131 3837 3131 6536 3934 3564 73a4a18711e6945d

0000040: 3739 3730 3130 3738 6434 3862 2e66 3230 79701078d48b.f20

0000050: 2e6d 7034 .mp4

可以看到XXD@后面出现了0a1f1f02这一段,在utf-8编码下,0x0a被解释为换行,其他的被解释为控制字符无法显示。解密过程正常,输出也正常,说明解密出来的就是原文(如果密文有问题,应该是报错,一点都解密不出来),至于为什么会包含这些奇怪的字符,就要问问你们后端怎么弄出来的这段了,是不是把非utf-8编码的字符强行连接在一起了。

那么这个空格又是如何出现的呢?我们把解密后的密文重新加密回去:

echo DrXWLKRt5byd6XcRGCk66G3BEQ0V7KA9gVZl0kaj/2WK9T+wWarVG7CUtN2H33VDZgVZ3DEuG4O3ja179eyPe6+//9I8w/JxQ2lvLNV4+PaD+in2ltgf3A== | openssl enc -d -a -des-cbc -K 55494a443839486b -iv 3132333435363738 | openssl enc -a -des-cbc -K 55494a443839486b -iv 3132333435363738

#输出

DrXWLKRt5byd6XcRGCk66G3BEQ0V7KA9gVZl0kaj/2WK9T+wWarVG7CUtN2H33VD

ZgVZ3DEuG4O3ja179eyPe6+//9I8w/JxQ2lvLNV4+PaD+in2ltgf3A==

注意到这里出现了换行,这时因为openssl会调用base64命令进行编码,为了兼容某些旧程序,会自动进行换行。之后在网络传输过程中或者你们后端做了替换或者你们的复制粘贴过程中,这个换行符变成了空格。从你给的第二段密文也可以看出,是同样的60个字符一个空格。这里的换行宽度和java的不一样,但是道理是一样的。

所以,解决方案就是,在前端或者后端移除空白字符。

Base64.encodeBase64String(text, Base64.NO_WRAP)

encrypted_msg.replace(/\s/g, '');

js des加密 java_java端采用DES/CBC/PKCS5Padding 加密,js解密不了。google搜了好多方法没能解决...相关推荐

  1. java中3des cbc,js與java通用的3DES(ECB,CBC)+Base64加密編碼,解碼解密

    J S端加密過程: key的處理: 通過創建指定的key,key必須是16位/24位/32位其中一種,但是常用的3DES加密的key為24位,下面使用的就是24位,key的長度可以隨意指定,在轉換ke ...

  2. des算法java_Java加密算法笔记--DES算法实现

    Java加密算法笔记--DES算法实现 在使用中发现,经过加密的字符串如果要进行传输,需要使用Base64进行编码,这样能保证加密信息的完整性,确保将来解密成功. import java.securi ...

  3. python aes加密 cbc_Python实现AES的CBC模式加密和解密过程详解 和 chr() 函数 和 s[a:b:c] 和函数lambda...

    1.chr()函数 chr() 用一个范围在 range(256)内的(就是0-255)整数作参数,返回一个对应的字符. 2.s[a:b:c] s=(1,2,3,4,5) 1>. s[a]下标访 ...

  4. js des加密 java_java JS DES互相加密解密 通用!!!

    如果 出现 异常 javax.crypto.IllegalBlockSizeException 那就看我博客园的 另外一篇  解决这个异常 帮客户整了1天 试了N个JS 的方法 终于找我弄出来了! j ...

  5. JS逆向加密-Cryptojs库AES/DES/RSA等代码

    目录 一.crypto-js 二.nodejs之md5.sha1.sha256.base64 三.crypto-js之AES 四.crypto-js之DES 五.crypto-js之3DES 六.Py ...

  6. 【加密】DES加密算法中,ECB和CBC模式有什么区别?

    目录 ECB和CBC模式的区别 ECB模式 CBC模式: AES五种加密模式(CBC.ECB.CTR.OCF.CFB) ECB (Electronic Codebook Book电码本模式) CBC( ...

  7. QT使用OpenSSL的DES/CBC/PKCS7加密字符串

    首先安装Openssl,然后QT项目的pro文件中添加引用 加密方法大部分来自:C++调用openssl实现DES加密解密cbc模式 zeropadding填充方式 pkcs5padding填充方式 ...

  8. Java DES 加解密(DES/CBC/PKCS5Padding)

    /*** DES加密** @param data 加密数据* @param key 密钥* @return 返回加密后的数据*/public static byte[] desEncrypt(byte ...

  9. java des加密类_java的DES加密解密辅助类

    java的DES加密解密辅助类 package temptest; import java.io.IOException; import java.io.UnsupportedEncodingExce ...

  10. 基于DES和RSA算法自动分配密钥的加密聊天程序

    文章目录 实现的功能 一.安全加密模型 二.代码 三.运行结果 总结 实现的功能 (1)实现基于DES和RSA算法的自动分配密钥加密聊天程序. (2)实现密钥自动生成,并基于RSA算法进行密钥共享. ...

最新文章

  1. linux 查看 文档 不显示注释 命令
  2. 网络编程常见问题总结
  3. Java项目中读取properties文件,以及六种获取路径的方法
  4. 两个栈实现一个队列,两个队列实现一个栈
  5. 浅谈各种数据库连接池
  6. JQuery,ajax异步加载selectoption/option/select多选框:
  7. android贝塞尔曲线多点,Canvas 贝塞尔曲线的多点波动
  8. word2vec python 代码实现_python gensim使用word2vec词向量处理中文语料的方法
  9. 微软研究院研究员Ryan Beckett 博士论文《Network Control Plane Synthesis and Verification》下载—2018ACM最佳博士论文题目奖
  10. 弹性计算安全组最佳实践及新特性介绍
  11. python程序设计期末作业_Python高级应用程序设计任务期末作业
  12. 解决WIN10本地账号绑定微软账号后无法解绑的方法
  13. 软件需求分析——需求基础
  14. esxi - with nvidia geforce 10 titan xp card
  15. Silverlight 4 - MVVM with Commanding and WCF RIA Services
  16. CrackMe160 学习笔记 之 044
  17. vex机器人 亚洲公开赛_VEX机器人亚洲公开赛,乐博乐博学员勇夺双料冠军!
  18. 实战智能推荐系统(1)-- 个性化推荐系统及其基本推荐算法
  19. 解决:Conda报错InvalidArchiveError
  20. CSMA/CA与CSMA/CD的区别

热门文章

  1. Ubuntu常用终端命令
  2. flutter实现Icon可以用Image替换
  3. 《Flutter 从0到1构建大前端应用》读后感—第8章【持久化】
  4. Android DatePicker 时间选择器
  5. amlogic_android7.1的s905x平台长按按键5s清除数据和缓存的实现思路
  6. 色彩缤纷的python(改变字体颜色及样式不完全版)
  7. 《Linux内核分析》第三周笔记 构造一个简单的Linux系统MenuOS
  8. JAVA的Random类介绍
  9. Eclipse 下用Maven构建ssh框架web工程
  10. 一张图搞懂VLAN中的标签