精华内容
下载资源
问答
  • aes解密

    千次阅读 2017-08-14 10:11:47
    上周五下午,正准备愉快的打打酱油,到下班时间就准时下班去配老婆吃饭,哪想到突然来个任务说表里有个字段是身份证号码,但是被aes加密了,需要把数据解码出来,并且当天就要结果。 当这个任务降临到我头上的时候...

    上周五下午,正准备愉快的打打酱油,到下班时间就准时下班去陪老婆吃饭,哪想到突然来个任务说表里有个字段是身份证号码,但是被aes加密了,需要把数据解码出来,并且当天就要结果。
    当这个任务降临到我头上的时候,我内心是拒绝的,周五临近下班给人派活是非常不人道的,虽然心里对这个pm一阵阵膈应,但是想着应该也不算什么麻烦事,以python的简单粗暴搞这种活还不是分分钟完事。

    但是生活总是处处充满意外。
    虽然已经得到了加密密钥,并且给出了php加密的代码,甚至给出来一个解密的网站[1]http://tool.chacuo.net/cryptaes 来实际操练确实可以解码出身份证信息。但是当我满心期待的用搜索出来的python库Py Crypto来解码得到一串报错之后,我知道事情没那么简单。
    经过一次次调整参数尝试之后,总算是调出适用的参数,大部分是直接拿来别人的代码,代码贴一下:

    -----------------引用代码------------------------
    *#!/usr/bin/env python
    # -*- coding:utf-8 -*- 
    #@author: rui.xu
    #这里使用pycrypto‎库
    #按照方法:easy_install pycrypto‎ 
    
    from Crypto.Cipher import AES
    from binascii import b2a_hex, a2b_hex
    import base64
    
    class prpcrypt():
        def __init__(self,key):
            self.key = key
            self.mode = AES.MODE_ECB
    
        #加密函数,如果text不足16位就用空格补足为16位,
        #如果大于16当时不是16的倍数,那就补足为16的倍数。
        def encrypt(self,text):
            cryptor = AES.new(self.key,self.mode,b'0000000000000000')
            #这里密钥key 长度必须为16(AES-128),
            #24(AES-192),或者32 (AES-256)Bytes 长度
            #目前AES-128 足够目前使用
            length = 16
            count = len(text)
            if count < length:
                add = (length-count)
                #\0 backspace
                text = text + ('\0' * add)
            elif count > length:
                add = (length-(count % length))
                text = text + ('\0' * add)
            self.ciphertext = cryptor.encrypt(text)
            #因为AES加密时候得到的字符串不一定是ascii字符集的,输出到终端或者保存时候可能存在问题
            #所以这里统一把加密后的字符串转化为16进制字符串
            return b2a_hex(self.ciphertext)
    
        #解密后,去掉补足的空格用strip() 去掉
        def decrypt(self,text):
            cryptor = AES.new(self.key,self.mode,b'0000000000000000')
            plain_text  = cryptor.decrypt(a2b_hex(text))
            return plain_text.rstrip('\0')*
    ----------------引用代码结束--------------------------------
    
    def decode_str(decrypter, string):
        # base64解码,并输出为16进制字符串
        b64 = base64.b64decode(string).encode('hex') 
        d = pc.decrypt(b64) #解密
        return d
    
    
    def get_decryptor():
        pc = prpcrypt('aes密码') #初始化密钥
        return pc
    
    if __name__ == '__main__':
        #raw = [
        #        'uNxljWnhV/50lISwAiCoOPGD159eP8MdhOLInjSptkk='
        #    ]
        r = open('scard.txt')
        scard = r.readlines()
        r.close()
        print len(scard)
        pc = get_decryptor()
        res = []
        for s in scard:
            idcard = decode_str(pc, s)
            res.append((idcard, s.strip()))
        #print "解密:",res
        f = open('res.txt', 'w')
        f.write("\n".join([str(x) for x in res]))
        f.close()
        print len(res)

    主要是base64编解码之后,需要输出为16进制字符串,否则直接解密会报错。

    展开全文
  • 个人例子,VS2013,DES加密、DES解密,AES加密,AES解密
  • AES解密硬件实现

    2019-04-29 21:53:13
    采用Verilog硬件描述语言,实现了AES解密算法,对于密码算法学习使用和安全芯片设计具有较大帮助
  • C语言实现AES解密

    2018-12-20 20:22:48
    程序参数格式:decrypt -i input.txt -p password.txt -o output.txt;decrypt为 input.txt 中的文本利用password.txt中的密码进行AES解密,同时生成output.txt
  • AES128加密解密源码
  • 应用场景如,微信小程序获取用户详细信息需要aes解密,这个时候就需要这个jar包
  • AES解密工具(java)

    2019-02-27 22:30:15
    用于springboot中进行AES解密,对该工具类中函数进行参数输入:密文(加密数据),秘钥,偏移量,解密后编码(如UTF-8)后可以得到解密后的数据。
  • 微信小程序分享群获取群id时后端接口返回“微信AES解密失败”,后来定位到原因是服务端用于解密的session_key失效。用户获取到openID存在缓存后,就不会每次login获取登录态了,这样会导致登录态失效,即后端维护的...
  • java AES 解密/解密

    2020-09-26 14:25:24
    java 对数据进行AES 加密解密,给数据一定的安全性.java 自带,无需下载jar. 偏移量和 密钥自己设置.只有相同的密钥和和偏移量才能解密.
  • AES解密失败处理-附件资源
  • 以下是针对在Linux操作系统下关于AES解密失败的问题进行了详细的分析介绍,需要的朋友可以过来参考下
  • 资料整理:java 前端页面AES加密数据 后端AES解密

    前端js加密数据:

       引用js下载资源页http://download.csdn.net/download/sxgyruan03mwp/9857334


             <script src=" js/crypto-js.js"></script>

      <script>
    var key = CryptoJS.enc.Utf8.parse("d7b85f6e214abcda");
    function Encrypt(word) {

    var srcs = CryptoJS.enc.Utf8.parse(word);
    var encrypted = CryptoJS.AES.encrypt(srcs, key, {
    mode : CryptoJS.mode.ECB , padding : CryptoJS.pad.Pkcs7
    });
    return encrypted.toString();
    }
    function Decrypt(word) {

    var decrypt = CryptoJS.AES.decrypt(word, key, {
    mode : CryptoJS.mode.ECB , padding : CryptoJS.pad.Pkcs7
    });
    return CryptoJS.enc.Utf8.stringify(decrypt).toString();
    }

           var stringObj= "{\"value\":\"\",\"pageNum\":\"\"}";

                    //为了防止传参过程中出现中文乱码,需要对加密后的字符串进行特殊处理(主要是加号)

            var tn = encodeURI(Encrypt(stringObj),"utf-8").replace(/\+/g,'%2B');

    console.log(tn);

    </script>

    后端 java代码:


    工具类

    package com.td.utils;
    import javax.crypto.Cipher;
    import javax.crypto.KeyGenerator;
    import javax.crypto.spec.SecretKeySpec;


    import org.apache.commons.codec.binary.Base64;


    import sun.misc.BASE64Decoder;


    public class AesEncryptUtil {
        private static final String KEY = "d7b85f6e214abcda";  
        private static final String ALGORITHMSTR = "AES/ECB/PKCS5Padding";  
        public static String base64Encode(byte[] bytes){  
            return Base64.encodeBase64String(bytes);  
        }  
        public static byte[] base64Decode(String base64Code) throws Exception{  
            return new BASE64Decoder().decodeBuffer(base64Code);  
        }  
        public static byte[] aesEncryptToBytes(String content, String encryptKey) throws Exception {  
            KeyGenerator kgen = KeyGenerator.getInstance("AES");  
            kgen.init(128);  
            Cipher cipher = Cipher.getInstance(ALGORITHMSTR);  
            cipher.init(Cipher.ENCRYPT_MODE, new SecretKeySpec(encryptKey.getBytes(), "AES"));  


            return cipher.doFinal(content.getBytes("utf-8"));  
        }  
        public static String aesEncrypt(String content, String encryptKey) throws Exception {  
            return base64Encode(aesEncryptToBytes(content, encryptKey));  
        }  
        public static String aesDecryptByBytes(byte[] encryptBytes, String decryptKey) throws Exception {  
            KeyGenerator kgen = KeyGenerator.getInstance("AES");  
            kgen.init(128);  


            Cipher cipher = Cipher.getInstance(ALGORITHMSTR);  
            cipher.init(Cipher.DECRYPT_MODE, new SecretKeySpec(decryptKey.getBytes(), "AES"));  
            byte[] decryptBytes = cipher.doFinal(encryptBytes);  


            return new String(decryptBytes);  
        }  
        public static String aesDecrypt(String encryptStr, String decryptKey) throws Exception {  
            return aesDecryptByBytes(base64Decode(encryptStr), decryptKey);  
        }  




        /**
         * 测试
         * 
         */
        public static void main(String[] args) throws Exception {


            String content = "{\"value\":\"\",\"pageNum\":\"\"}";  
            System.out.println("加密前:" + content);  

            System.out.println("加密密钥和解密密钥:" + KEY);  

            String encrypt = aesEncrypt(content, KEY);  
            System.out.println(encrypt.length()+":加密后:" + encrypt);  

            String decrypt = aesDecrypt("km2zsU2rpUsnA2n/Vw6mNIAMGaXaTPL 5g/M1 E7A8opKBHDXT8RCOo2Fs/pO5XX", KEY);  
            System.out.println("解密后:" + decrypt);  
        }
    }


     后端接收参数后:tn为参数名称


    AesEncryptUtil.aesDecrypt(tn, "d7b85f6e214abcda");







    展开全文
  • AES解密算法c语言实现,及测试代码,说明等文档
  • 之前文章Java里面生成AES加密,c++里面AES解密介绍了Java代码加密,c++代码解密。本文介绍:Java带KeyGenerator(密钥生成器)生成AES加密,c++里面AES解密 一、Java代码 加密: public static void OutPut(byte[] ...

    之前文章Java里面生成AES加密,c++里面AES解密介绍了Java代码加密,c++代码解密。本文介绍:Java带KeyGenerator(密钥生成器)生成AES加密,c++里面AES解密

    一、Java代码

    加密:

    public static void OutPut(byte[] content) {
    		for (int i=0; i<content.length; i++) {
    			System.out.print(content[i] + ", ");
    		}
    		System.out.print("\n");
    	}
    	
    public static String encrypt(String content) {
    		try {
    			if (content.isEmpty())
    				return "";
    
    			String password = "t7CLWhtUTAgAFbw0";
    			// 使用密钥生成器
    			KeyGenerator kgen = KeyGenerator.getInstance("AES");
    			SecureRandom secureRandom = SecureRandom.getInstance("SHA1PRNG");
    			secureRandom.setSeed(password.getBytes());
    			kgen.init(128, secureRandom);
    			SecretKey secretKey = kgen.generateKey();
    			byte[] enCodeFormat = secretKey.getEncoded();
    			OutPut(enCodeFormat);
    			SecretKeySpec key = new SecretKeySpec(enCodeFormat, "AES");
    			Cipher cipher = Cipher.getInstance("AES");// 创建密码器
    			byte[] byteContent = content.getBytes("utf-8");
    			cipher.init(Cipher.ENCRYPT_MODE, key);// 初始化
    			byte[] result = cipher.doFinal(byteContent);	 
    			String str = Base64.encodeBase64String(result);
    			
    			return str; // 加密
    		} catch (NoSuchAlgorithmException e) {
    			// e.printStackTrace();
    		} catch (NoSuchPaddingException e) {
    			// e.printStackTrace();
    		} catch (InvalidKeyException e) {
    			// e.printStackTrace();
    		} catch (UnsupportedEncodingException e) {
    			// e.printStackTrace();
    		} catch (IllegalBlockSizeException e) {
    			// e.printStackTrace();
    		} catch (BadPaddingException e) {
    			// e.printStackTrace();
    		}
    		return null;
    	}
    

    解密:

    public static String decrypt(String str) {
    		try {
    			String password = "t7CLWhtUTAgAFbw0";
    			byte[] content = Base64.decodeBase64(str);
    			// 使用密钥生成器
    			KeyGenerator kgen = KeyGenerator.getInstance("AES");
    			SecureRandom secureRandom = SecureRandom.getInstance("SHA1PRNG");
    			secureRandom.setSeed(password.getBytes());
    			kgen.init(128, secureRandom);
    			SecretKey secretKey = kgen.generateKey();
    			byte[] enCodeFormat = secretKey.getEncoded();
    			SecretKeySpec key = new SecretKeySpec(enCodeFormat, "AES");
    			Cipher cipher = Cipher.getInstance("AES");// 创建密码器
    			cipher.init(Cipher.DECRYPT_MODE, key);// 初始化
    			byte[] result = cipher.doFinal(content);
    			
    			return new String(result);
    		} catch (NoSuchAlgorithmException e) {
    			// e.printStackTrace();
    		} catch (NoSuchPaddingException e) {
    			// e.printStackTrace();
    		} catch (InvalidKeyException e) {
    			// e.printStackTrace();
    		} catch (IllegalBlockSizeException e) {
    			// e.printStackTrace();
    		} catch (BadPaddingException e) {
    			// e.printStackTrace();
    		} catch (Exception e) {
    			// e.printStackTrace();
    		}
    		return "";
    	}
    

    二、Java测试代码

    String enStr = encrypt("hello world");
    System.out.println("enStr: " + enStr);
    System.out.println("deStr: " + decrypt(enStr));
    

    测试结果:
    在这里插入图片描述
    重要说明:c++能解密的关键是获取上面输出框里面打印除了的值,把它作为c++里面解密的key
    c++代码片段:

    UINT8 gAesKey[32] = { -84, 115, -48, 61, 3, 127, 34, 37, -73, -21, 85, 100, -4, 117, 63, 19 }; // t7CLWhtUTAgAFbw0
    
    bool gInitFlag = false;
    
    CAes256::CAes256()
    {
    	
    }
    
    void CAes256::initAes(const string& key)
    {
    	if (key != "") //t7CLWhtUTAgAFbw0
    	{
    		memset(gAesKey, 0x00, 32);
    		memcpy_s(gAesKey, 16, key.c_str(), 16);
    	}
    
    	aesInit(gAesKey);
    }
    

    代码详情

    三、c++测试代码

    使用CAesLib.lib,代码如下:

    // TestAesLib.cpp : 定义控制台应用程序的入口点。
    //
    
    #include "stdafx.h"
    #include <iostream>
    #include "encrypt_decrypt.h"
    
    using namespace std;
    
    #pragma comment(lib, "CAesLib.lib")
    
    int _tmain(int argc, _TCHAR* argv[])
    {
    	// "hello world"
    	string enstr = "czYfaKaALBfQwIlojCC0Dg=="; // 原文:hello world,加密字符串来自java代码加密
    	string str = CAes256::decryptData(enstr ); // c++解密
    	cout << "str = " << str << endl;
    	cout << "enstr = " << CAes256::encryptData(str) << endl; // c++加密,对比结果与java代码加密的是否一样
    	
    	system("pause");
    
    	return 0;
    }
    
    

    运行结果:
    在这里插入图片描述

    展开全文
  • AES解密,key长度不够16处理

    千次阅读 2020-04-10 11:04:18
    AES解密,有时会遇到key长度不够16位的场景,如何处理,如下以AES-128-ECB解密模式为例进行展示。 public class Test { public static void main(String[] args) throws Exception { String str=...

    AES解密,有时会遇到key长度不够16位的场景,如何处理,如下以AES-128-ECB解密模式为例进行展示。

    public class Test {
    
        public static void main(String[] args) throws Exception {
            String str="htNbZOHaXvMimfeSoK5jQg==";//AES-128-ECB加密后的密文
            String decStr=decrypt(str,"123");
            System.out.println(decStr);
    
        }
        /* *
         * @Author na_tion
         * @Description AES解密函数
         * 也可以使用其他网上常见的函数
         * @Date 10:53 上午 2020/04/10
         * @Param [content, passwd]
         * @return java.lang.String
         **/
        public static String decrypt(String content, String passwd) {
            try {
                Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");// 创建密码器
                SecretKeySpec key = new SecretKeySpec(passwd.getBytes(), "AES");
                cipher.init(Cipher.DECRYPT_MODE, key);// 初始化
                byte[] result = new BASE64Decoder().decodeBuffer(content);
                return new String(cipher.doFinal(result)); // 解密
            } catch (Exception e) {
                e.printStackTrace();
            }
            return null;
        }
    
    }

    如上代码,会报如下错误(提示key长度为3字节,不够16字节)

    java.security.InvalidKeyException: Invalid AES key length: 3 bytes
    	at com.sun.crypto.provider.AESCrypt.init(AESCrypt.java:87)
    	at com.sun.crypto.provider.ElectronicCodeBook.init(ElectronicCodeBook.java:94)
    	at com.sun.crypto.provider.CipherCore.init(CipherCore.java:591)
    	at com.sun.crypto.provider.CipherCore.init(CipherCore.java:467)
    	at com.sun.crypto.provider.AESCipher.engineInit(AESCipher.java:313)
    	at javax.crypto.Cipher.implInit(Cipher.java:801)
    	at javax.crypto.Cipher.chooseProvider(Cipher.java:863)
    	at javax.crypto.Cipher.init(Cipher.java:1248)
    	at javax.crypto.Cipher.init(Cipher.java:1185)

    处理方法:

    用\0补齐不够的位数,代码示例如下

        public static void main(String[] args) throws Exception {
            String str="htNbZOHaXvMimfeSoK5jQg==";//AES-128-ECB加密后的密文
            //String decStr=decrypt(str,"123");
            String decStr=decrypt(str,"123\0\0\0\0\0\0\0\0\0\0\0\0\0");//用\0补齐不够的位数
            System.out.println(decStr);
    
        }

     

    展开全文
  • 256位加密和解密、AES解密和加密

    千次阅读 2019-02-22 13:22:41
    AES解密 name="Data"被解密的密文 name="Key"密钥 name="Vector"向量 明文 AES加密 name="plainStr"明文字符串 密文 AES加密 明文字符串 nam
  • 微信开发-aes解密失败

    千次阅读 2019-12-12 17:09:55
    错误信息:解密微信回掉消息出现aes解密失败 排查问题:因为是微服务,客户收到消息会出现接受微信会存在扫码有消息接受有,一会没有消息推送 于是排查问题 1.首先查看日志,具体看是什么问题,每台服务器都查看日志...
  • java实现SHA1、SHA、MD5、AES加密、AES解密、BASE64解密、BASE64加密,以及apache BASE64 jar和源码
  • 具有AES解密功能的Node.js + MongoDB服务器 要运行服务器,请在命令行中写: npm安装 节点服务器
  • 微信小程序 aes加密 aes解密

    千次阅读 2018-03-20 20:43:51
    微信小程序开发交流qq群 173683895 承接微信小程序开发。...var CryptoJS = require('aes.js'); var key = CryptoJS.enc.Utf8.parse("十六进制数作为秘钥"); var iv = CryptoJS.enc.Utf8.parse(...
  • 微信退款AES解密

    2018-08-09 10:26:42
    AES加密时的 java.security.InvalidKeyException: Illegal key size 异常
  • AES解密失败处理

    千次阅读 2021-01-18 18:41:40
    异常java.security.InvalidKeyException:illegal Key Size,是因为美国对加密解密等软件进行了出口限制,Java 发布的运行环境包中的加解密有一定的限制,比如默认不允许 256 位密钥的 AES解密(在Java的核心类库...
  • 微信退款结果通知报文AES解密

    万次阅读 2017-08-04 11:27:07
    最近做微信支付涉及到退款,查看官方文档,发现通知报文是加密的,解密方式如下: (1)对加密串A做base64解码,得到加密串B ...(3)用key*对加密串B做AES解密 这里分别涉及到了BASE64,MD5,AES
  • AES 128/192/256位CBC/CFB/ECB/OFB/PCBC 在线加密解密 解密内容:1243CFEBD819AA6B1C717DE870459F7B ...AES解密异常Given final block not properly padded javax.crypto.BadPaddingExceptio...
  • 前端使用CryptoJS的AES解密,Java后端加密实现。CryptoJS的AES输出使用的是openssl格式,所以处理起来有一些不一样,详细代码如下: import org.bouncycastle.jce.provider.BouncyCastleProvider; import javax....
  • AES解密VerilogHDL源码

    2018-03-19 16:04:06
    aes128位数据加密算法源码,有veriolg硬件描述语言写的
  • 以下是Android 里面的AES解密方法,有谁能在iOS里面实现的,非常感谢 public static String decrypt(String content, String key) { //反序列化AES密钥 SecretKeySpec keySpec = new SecretKeySpec(Base64....
  • CRC32-IEEE802.3,CRC16-CCITT,异或校验,整形转浮点,AES加密,AES解密

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 51,340
精华内容 20,536
关键字:

aes解密