精华内容
下载资源
问答
  • 文章目录一、Base32加密二、Python脚本十六进制密文解码 一、Base32加密 除了Base64还有Base32的密文 而Base32会出现好几个等号的密文 –>Base32加解密传送门<– 举个例子 #明文 Base32加密 #密文 ...

    一、Base32加密

    除了Base64还有Base32的密文
    而Base32会出现好几个等号的密文

    –>Base32加解密传送门<–

    举个例子

    #明文
    Base32加密
    #密文
    IJQXGZJTGLSYVIHFV6DA====
    

    二、Python脚本十六进制密文解码

    string = "666C61677b37656535653934343735636665376131333432383330393631393439646462337d"
    cout = 0
    result = []
    header = "0x"
    one = header
    
    #依次取出两位添加0x头表示十六进制
    for i in string:
        cout += 1
        if cout == 1:
            one += i
        elif cout ==2:
            one += i
            cout = 0
            result.append(one)
            one = header
            
    #使用int(0x00,base=16)转换成十进制整型数字
    for i in result:
    	print(chr(int(i,base=16)),end="")
    
    展开全文
  • 微信退款异步通知密文解码

    千次阅读 2020-04-10 10:43:50
    我们对一笔微信退款是否成功除了查询以外,还有最保险的一种模式就是对通知的解析,但是微信退款通知居然是密文模式的。 我们要根据他的要求解密出来以后才可以解析。那么先拿到通知吧。 二、接收通知 三、解析...
    一、通知接口

    我们对一笔微信退款是否成功除了查询以外,还有最保险的一种模式就是对通知的解析,但是微信退款通知居然是密文模式的。
    微信退款通知接口
    解密方式
    我们要根据他的要求解密出来以后才可以解析。那么先拿到通知吧。

    二、接收通知

    接收

    三、解析通知

    这里我就不做详细的介绍,直贴代码

    
    public Map<String, String> getRequestParams(HttpServletRequest request, String payType) throws Exception {
            Map<String, String> paramsData = new HashMap<>();
            InputStream inputStream = request.getInputStream();
            BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
            final StringBuffer sb = new StringBuffer();
            String line = null;
            try {
                 while ((line = bufferedReader.readLine()) != null) {
                     sb.append(line);
                 }
            } finally {
                 bufferedReader.close();
                 inputStream.close();
            }
             paramsData = WXPayUtil.xmlToMap(sb.toString());
             return paramsData;
    }
    

    那么拿到的是接口中的数据了

    四、解密数据

    直接上代码

    /**
         * AES解密
         *
         * @param base64Data
         * @return
         * @throws Exception
         */
     /**
         * 密钥算法
         */
        private static final String ALGORITHM = "AES";
        /**
         * 加解密算法/工作模式/填充方式
         */
        private static final String ALGORITHM_MODE_PADDING = "AES/ECB/PKCS7Padding";
    
        public static String decryptData(String base64Data, String lowMad5Key) throws Exception {
            SecretKeySpec key = new SecretKeySpec(lowMad5Key.getBytes(), ALGORITHM);
            Security.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider());
            Cipher cipher = Cipher.getInstance(ALGORITHM_MODE_PADDING);
            cipher.init(Cipher.DECRYPT_MODE, key);
            Base64.Decoder decoder = Base64.getDecoder();
            String newData = new String(decoder.decode(base64Data), "ISO-8859-1");
            return new String(cipher.doFinal(newData.getBytes("ISO-8859-1")), "utf-8");
        }
        /**
         * MD5加密
         *
         * @param data
         * @return
         * @throws Exception
         */
        public static String MD5(String data) throws Exception {
            MessageDigest md = MessageDigest.getInstance("MD5");
            byte[] array = md.digest(data.getBytes("UTF-8"));
            StringBuilder sb = new StringBuilder();
            byte[] var4 = array;
            int var5 = array.length;
            for (int var6 = 0; var6 < var5; ++var6) {
                byte item = var4[var6];
                sb.append(Integer.toHexString(item & 255 | 256).substring(1, 3));
            }
            return sb.toString().toUpperCase();
        }
        //示例:不可以直接用,已经把KEY值修改,需要根据实际进行操作
        public static void main(String[] args) throws Exception {
            String a = "Czal3idTbyqfr3FJ9EnBRIWX8K6JNgB9RfTpdDfw6H5NATjCZh+JJd+NQTi2YeFeK6Cg+70WUhQWoRl7RcZ6oJ5d8Xxz/ALrKLuko+fkJj4SyN1exOfJAGqT6IR3M+tjtOh/h0nf+w3kbVpwsrQMNTfZO88+1HDZBvpLm3HpRnyRL+8KxBoZGRNIX4Xmk7RE/Q98ghZLaXj3OWk8W1X8NV5UUzofgnNP2/4WgB6TXqQjibFDhPvI1CeJtFOtB8umbS/o4LXaQ14DvjGF37k5FoOz9XBO8/xe4vXRN02GlcmEaC9GH5f/krn9liRNxnKjUdJxvyFDaxJNrwiAXgKC4s7AmUauyvpuEU1g5kol1FwnKyEUJvwjWI1T+7nGasLcwlQ8W1qBB2VKGk49xpS73ePbA9jJB/Z8FT6EEqSFjEc7j7rQT+DLrZvQtK7xl18roJDHIl/nTGCgwosmXpTJ2bW9sYJ6t6bbFf+GQER4A1CX46RryQSNMzVUfjAKW566QPyrP35YCw0rE6mPP1CfXbbWUq+x8po9mXyK9/r0KNbNKWe7MbkMsa2rDg1fcld7hsE6VYzoFkAObkXR6gjrkQ37R70n27AiuqyJmviq42/Hlga7uCH4WN9bPSGYfqLfAC+UkSc9wO1m3uKd7Jw74g+kKukFAhRTBLosfgHMZSjnQJZfrWJIk4gVhWD990Si2W7aoub0nAVK5Lx/jXhG05Ouu9h0zVLsaULRhKmiLmR3NUuxYBTZKEQ7y2n9aFKcMMXAWm+r5WteTx6UtmDYgrqtOUEPNflMw2vclNdVKv1NAngWppk9QYuiW3LaRMz13agYPBxtbQ1nl1RT+0Ng+7DEshc0VMRfI9dNTxYB0+nMJfLXNdUylSEpAYMKv76ck973Ue13VP6AEp6KyhBgdQbgTlpu9CHTc6/N8sUqjprXGwiNu02V2Iqdr2K5uisyOrh6KG1BzAAhp+uTaIr00XZYnrBX/Xg2SRVPCaZTLoWqmTElFmOvwxJy5XDmEwrdni1myT8BxhLVc2Gv/SAUfBjTJJDfvMApMS7TZJBEajj3iSPkz+A4pEk89W3vbVyh0+wtqukPdhVinsHoIQXUKw";
            String ab = AESUtil.decryptData(a, AESUtil.MD5("GXXXXXL1236458sskdjsghxc849728").toLowerCase());
            Map<String, String> xmlMap = WXPayUtil.xmlToMap(ab);
            System.out.println(ab);
            System.out.println(xmlMap.get("out_refund_no"));
        }
    

    解密后:
    在这里插入图片描述

    展开全文
  • 博主在用java做微信小程序的密文解码时遇到了这个问题。挠人的是这个错误只是偶尔出现,但是很影响使用体验。经过一番排查总算找到了错误原因。 这是一个很容易忽视的坑。具体错误`: 2021-03-10 21:43:32.224 ERROR...

    博主在用java做微信小程序的密文解码时遇到了这个问题。挠人的是这个错误只是偶尔出现,但是很影响使用体验。经过一番排查总算找到了错误原因。
    这是一个很容易忽视的坑。具体错误`:

    2021-03-10 21:43:32.224 ERROR 25476 --- [nio-443-exec-93] o.s.b.w.servlet.support.ErrorPageFilter  : Forwarding to error page from request [/user/loggingByPhone] due to exception [unable to decode base64 string: invalid characters encountered in base64 data]
    
    org.bouncycastle.util.encoders.DecoderException: unable to decode base64 string: invalid characters encountered in base64 data
    	at org.bouncycastle.util.encoders.Base64.decode(Unknown Source) ~[bcprov-jdk15on-1.65.jar:1.65.0]
    	at com.justwannago.SQL.ThirdClassTools.WechatUtil.decryptData(WechatUtil.java:30) ~[classes/:0.0.1-SNAPSHOT]
    	at com.justwannago.SQL.ThirdClassTools.WechatUtil.mainDecode(WechatUtil.java:20) ~[classes/:0.0.1-SNAPSHOT]
    	at com.justwannago.SQL.service.UserServiceImplement.Decode(UserServiceImplement.java:116) ~[classes/:0.0.1-SNAPSHOT]
    	at com.justwannago.SQL.controller.justTest.getInfoByPhone(justTest.java:65) ~[classes/:0.0.1-SNAPSHOT]
    	at sun.reflect.GeneratedMethodAccessor424.invoke(Unknown Source) ~[na:na]
    	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_151]
    	at java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_151]
    

    出错在于从微信API传输的session有时包含“\”,而Base64的处理字符中不包含""字符,所以需要把session_key字符串中的右斜杠删除。

    平时正常解密提供的session大多是以下这种:
    xCHPs4Pw6ojOHuRARWMsAQ==(除去两个等号,共22个字符,一般而言session_key就是这个长度)

    但是偶尔会出现以下这种:
    Je854c9dFCi3BwhDKG/gnw==(除去两个等号,共23个字符,其中\不是Base64可以处理的字符)

    出现原因:当session_key中包含左斜杠时,会连带包含有转义的右斜杠,Base64无法处理右斜杠,于是报错。
    解决方案:在调用解码类之前把字符串中的右斜杠替换为空即可

    session_key = session_key.replace("\\", "");//session_key中可能出现\这个符号,会导致invalid错误
    
    展开全文
  • 密文是一张NN的格子纸,每个格子都有一个字母。解密需要用到另一张NN的格子纸,这张纸有的格子是透明的,有的格子是涂黑的。两张纸重合后,将透明处的字母按照从上到下,行内自左到右的顺序读出,然后将解密纸顺时针...

    题目

    密文是一张NN的格子纸,每个格子都有一个字母。解密需要用到另一张NN的格子纸,这张纸有的格子是透明的,有的格子是涂黑的。两张纸重合后,将透明处的字母按照从上到下,行内自左到右的顺序读出,然后将解密纸顺时针旋转90度再读一次,一共读4次。现在给你密文和解密纸,请输出原文。

    示例1:
    输入:

    [1101,1010,1111,1110] ,
    [ABCD,EFGH,IJKL,MNPQ]

    输出:

    CFHQGLMPAIKNBDEJ

    备注:

    1<=N<=100


    代码

    # 输入:
    # 1101,1010,1111,1110
    # ABCD,EFGH,IJKL,MNPQ
    # 输出CFHQGLMPAIKNBDEJ
    # s = [i for i in input().split(',')] # 用户输入
    # s2 = [i for i in input().split(',')]
    
    s=["1101","1010","1111","1110"]
    s2 = ["ABCD","EFGH","IJKL","MNPQ"]
    
    res = []  # 存0出现的位置的索引(坐标)
    res2 = []  # 存从字母矩阵中取出来的字符
    
    
    for j in range(0, len(s)):  # 行遍历
        for k in range(0, len(s)):  # 列遍历,因为是N*N的方阵 ,此处是宽度为len(s)
            if '0' == s[j][k]:  # 如果为0,记下坐标
                res.append([j, k])
    
    
    for k in range(4):
        for m in range(0, len(s)):
            if k == 0:  # 第一次不作索引变换
                continue
    
            temp = res[m][0]  # 下一次出现的位置相对于上一次的旧位置(x, y)来说为(y, len(s)-x-1)
            res[m][0] = res[m][1]
            res[m][1] = len(s)-temp-1
        # print('res', res)
    
        res.sort()  # 排序,为了满足下一次从上往下,从左往右遍历条件
        for l in range(len(s)):
            res2.append(s2[res[l][0]][res[l][1]])  # 依次添加各个坐标上对应的矩阵元素
    
    print(res2)
    print(''.join(res2))  # 输出CFHQGLMPAIKNBDEJ
    
    
    展开全文
  • 1:准备好你的密文(将铭文转换成密文)代码如下:# coding=utf-8import base64def encrypt(en_str):"""加密:先对原字符串作base64加密,然后将加密后的字符串首尾字符对换位置,得到密文:param en_str: 待加密明文:...
  • 1:准备好你的密文(将铭文转换成密文) 代码如下: # coding=utf-8 import base64 def encrypt(en_str): """ 加密:先对原字符串作base64加密,然后将加密后的字符串首尾字符对换位置,得到密文 :param en_...
  • 题目来源实验吧 分析题意,说是困在栅栏中,所以将字符栅栏解密看看有什么,利用工具CTFcraktools 得到三条密文然后说是密码是凯撒,在将四栏依次凯撒解码,寻找可能的key,这里很显然,在尝试第一个的时候,解出的...
  • //存放密文分解出来的字符串,一共n列 cin >> str; //确定每列的字符数 if (str.length() % n != 0) { col_capacity = str.length() / n + 1; } else { col_capacity = str.length() / n;...
  • 题目来源实验吧分析题意,说是困在栅栏中,所以将字符栅栏解密看看有什么,利用工具CTFcraktools得到三条密文然后说是密码是凯撒,在将四栏依次凯撒解码,寻找可能的key,这里很显然,在尝试第一个的时候,解出的...
  • char KEY[26][2] ; for(int i =0;i<26;i++) { KEY[i][0] = 'a' +i;//第一列存放26个字母a~z KEY[i][1] = *(HC[i]);//这里HC是存放诸如100110,101101,等较短的26个字符串 } ... }
  • 编码-解码-序列 实现各种功能,以使用密文字母对单词序列进行编码和解码
  • 一:url编码解码简介 url编码解码,又叫百分号编码,是统一资源定位(URL)编码方式。URL地址(常说网址)规定了常用地数字,字母可以直接使用,另外一批作为特殊用户字符也可以直接用(/,:@等),剩下的其它所有字符...
  • Base64编码和解码

    2019-02-17 16:31:00
    Base64编码和解码 DES加密后密文长度是8个整数倍 加密后比明文长度变长,所以编码表找不到对应字符,乱码 ...2.解密前对密文解码 public static String encode(byte[] data) { StringBuffer sb = new S...
  • 大概流程如下: 密码字符串->openssl aes编码->base64编码->存文件----------读文件->base64解码->openssl aes解码->得到原始字符串 下面是代码,具体的分析写在注释上: #include #include #include #include ...

空空如也

空空如也

1 2 3 4 5 ... 18
收藏数 357
精华内容 142
关键字:

密文解码