`
A牛哥哥
  • 浏览: 150033 次
社区版块
存档分类
最新评论

js对AES加密的图片解密

 
阅读更多
   加密是在客户端加密的,如android 和 IOS app里面,对图片加密后上传到服务器, 服务器接收并存储这个加密后的图片, 假设这个图片访问的url是http://xxx.png, 现在要在H5页面中显示这个加密图片,就要用js解密,用的是CryptoJS解密的(https://github.com/brix/crypto-js/releases),代码如下:
//需要引入的js文件
<script type="text/javascript" src="static/js/aes/aes.js"></script>
<script type="text/javascript" src="static/js/aes/core.js"></script>
<script type="text/javascript" src="static/js/aes/enc-base64.js"></script>
<script type="text/javascript" src="static/js/aes/enc-u8array.js"></script>
<script type="text/javascript" src="static/js/aes/lib-typedarrays.js"></script>
<script type="text/javascript" src="static/js/aes/mode-ecb.js"></script>

//在解密之前,要获取AES解密的key,我这里是个例子就写死了
var key = "1234567812345678"
var url = "http://xxx.png";

//页面上用ajax获取图片的字节数组
var xhr = new XMLHttpRequest();
xhr.open("GET",url,true); 
xhr.responseType = "arraybuffer"; 
xhr.onload = function() {
  if(xhr.readyState ==4){
	if (xhr.status == 200){
		process(xhr.response,key); 
	}else{
		retry(url,key);
	}
  }
}
xhr.send();



function process(buffer,key) {
  //将上面下载的图片转为base64编码
  var view = new Uint8Array(buffer);
  var contentWA = CryptoJS.enc.u8array.parse(view); 
  var dcBase64String = contentWA.toString(CryptoJS.enc.Base64);

  //解密
  var decryptedData = CryptoJS.AES.decrypt(dcBase64String, key, {  
		                  mode: CryptoJS.mode.ECB,
		                  padding: CryptoJS.pad.Pkcs7
		      });

  //把解密后的对象再转为base64编码,这步是关键,跟解密文字不同
  var d64 = decryptedData.toString(CryptoJS.enc.Base64);

  //构造img标签,显示解密后的图片
  var img = new Image;
  img.src = "data:image/png;base64,"+d64;
  document.body.append(img);
}

//如果获取图片失败,尝试再获取一次.图片较少的话不需要重新获取,我这边图片一次性在40张左右,而且图片是上M的大图,失败较多,用这个再获取一次效果不错
function  retry(url,key){
  var xhr = new XMLHttpRequest();
  xhr.open("GET",url,true); 
  xhr.responseType = "arraybuffer"; 
  xhr.onload = function() {
	if (xhr.status == 200){
		process(xhr.response,key);
        }
  }
  xhr.send();
}


分享到:
评论
3 楼 yy360 2018-03-22  
大神 有demo吗  我照着 配置了  总是少文件 要不少方法 
 var decryptedData = CryptoJS.AES.decrypt(dcBase64String, key, {
                iv: iv,
                mode: CryptoJS.mode.ECB,
                padding: CryptoJS.pad.Pkcs7
            });
2 楼 yy360 2018-03-22  
240162956@qq.com  谢谢
1 楼 yy360 2018-03-22  
大神 有demo吗  我照着 配置了  总是少文件 要不少方法   var decryptedData = CryptoJS.AES.decrypt(dcBase64String, key, {
                iv: iv,
                mode: CryptoJS.mode.ECB,
                padding: CryptoJS.pad.Pkcs7
            });

相关推荐

    基于PHP和JS的AES相互加密解密方法详解(CryptoJS)_PHP_JS_AES源码

    在PHP和JS之间进行AES加密解密时,需要注意的是,由于两者的实现可能略有不同,如IV的处理方式,因此需要确保在两端保持一致。在上面的例子中,我们使用了相同的密钥和IV,并将它们作为参数传递。为了在客户端(JS)...

    AES实现前端JS和后端java加密解密

    后端Java实现AES加密解密: 1. **导入依赖**:在Java中,我们需要添加Apache Commons Codec库来处理Base64编码,以及Java Cryptography Extension (JCE)来支持AES操作。确保JCE未受限制,因为默认情况下,Java对某些...

    uniapp 前后端AES加密解密.rar

    本压缩包"uniapp 前后端AES加密解密.rar"正是为了解决这一问题,它包含了在uniapp环境下实现前后端AES加密解密的方法。AES(Advanced Encryption Standard),即高级加密标准,是一种广泛使用的对称加密算法,具有...

    java后台及前端js使用AES互相加解密及前端md5加密

    JavaScript中,可以使用MD5库如`crypto-js`来计算MD5哈希值。 5. **Java与JavaScript之间的兼容**:在Java后台与JavaScript前端之间进行AES加解密时,需要注意密钥的统一和编码问题。通常,Java使用字节数组表示...

    java,php,GOLang,JavaScript,AES加密解密代码互通

    总的来说,跨语言的AES加密解密互通需要对各种语言的加密API有深入理解,并保持一致性以确保数据安全地在不同环境中传输。这个主题对于开发跨平台应用和微服务架构的开发者来说,是一个非常实用的知识点。

    AES加密解密 JS html 前端

    本文将详细探讨如何使用JavaScript(JS)在HTML前端实现AES加密解密,并着重讲解AES的CBC模式及其填充方式。 AES,全称为Advanced Encryption Standard,即高级加密标准,是一种广泛应用于网络安全的对称加密算法。...

    jquery实现aes加密,后端php解密

    在jQuery中,可以如下使用crypto-js进行AES加密: ```javascript var key = CryptoJS.lib.WordArray.random(16); // 生成128位随机密钥 var iv = CryptoJS.lib.WordArray.random(16); // 生成128位随机初始化向量 ...

    不用cryptoJs的aes加密解密

    总之,不依赖cryptoJs的AES加密解密是通过自定义的JavaScript代码完成的,涉及的关键步骤包括密钥扩展、填充、字节到状态的转换、加密/解密过程以及Base64编码/解码。如果你需要在项目中实现这种功能,你需要深入...

    AES 加密、解密示例

    在JavaScript中实现AES加密和解密是确保数据安全传输的重要手段,尤其对于前端开发人员来说,理解并能熟练运用AES至关重要。 AES的工作模式有多种,包括ECB(Electronic Codebook)、CBC(Cipher Block Chaining)...

    js前端aes加密解密所有的库文件

    本文将介绍一个名为“asmcrypto.js”的JavaScript库,它是用于AES加密解密的一个高效实现。 **asmcrypto.js库** asmcrypto.js是一个轻量级、高性能的JavaScript加密库,它使用了WebAssembly技术来提供接近原生速度...

    php+uni-app AES加密解密.rar

    在uni-app中,可以使用JavaScript的crypto-js库来实现AES加密解密。首先,你需要通过HBuilderX引入该库,然后在uni-app代码中使用: ```javascript const CryptoJS = require('crypto-js'); const key = 'your_...

    crypto-js.zip,AES加密解密egret库有.d.ts文件

    这个"**crypto-js.zip**"压缩包中包含了针对Egret的AES加密解密库,并且带有.d.ts文件,这意味着开发者可以无缝地将这个库集成到Egret项目中,享受类型检查的便利。 **AES加密工作原理:** AES加密的过程主要分为...

    java前后端通讯AES加密及解密样例

    通过这个案例,我们可以看到在Spring Boot项目中实现AES加密解密的基本步骤。然而,实际项目中还应考虑其他安全措施,例如使用HTTPS协议、密钥的动态生成和安全存储、以及对称加密与非对称加密的结合使用等,以增强...

    uni-app aes的加密和解密

    uni-app aes的加密和解密

    AES加密解密js

    AES加密解密第三方js,主要用于实现前端页面数据传输的加密与解密,具体如何使用参考本人博客:http://www.cnblogs.com/sunny1009/category/1101490.html

    AES JS加密JAVA解密

    在这个场景中,"AES JS加密JAVA解密" 提到的是使用JavaScript进行AES加密,然后在Java环境中对加密后的数据进行解密的过程。下面我们将深入探讨这个主题。 首先,AES加密的基本原理是通过一个密钥和一系列复杂的...

    PHP开发过程中AES加密解密问题 js前端AES加密,PHP解密

    AES加密通常与JavaScript结合使用,以便在客户端进行数据预处理,然后在服务器端进行解密。这有助于防止在数据传输过程中被窃取。本篇文章将深入探讨如何在JavaScript前端实现AES加密,并在PHP后端进行解密。 **AES...

    aes、ras,前端js加密,后端java解密

    在JavaScript中,我们可以使用如`crypto-js`库来实现AES加密和解密。 **RSA** RSA是一种非对称加密算法,由两个密钥组成:公钥和私钥。公钥用于加密,私钥用于解密。这种机制允许数据在不安全的网络上传输时,只有...

    基于PHP和JS的AES相互加密解密方法

    以上就是在PHP和JavaScript之间使用AES加密解密的基本步骤。在实际应用中,应考虑错误处理、密钥管理、以及对用户输入的验证等安全措施。确保在前端和后端之间传输的数据始终受到保护,防止中间人攻击和其他安全威胁...

    aes加密解密js

    总的来说,AES加密解密js涉及了JavaScript环境下的数据安全处理,通过库如CryptoJS实现加密和解密功能,并可能与项目的组件和构建工具(如Rollup.js)相结合,以提供完整的数据安全解决方案。在实际开发中,还需要...

Global site tag (gtag.js) - Google Analytics