AES 可逆性加密算法

AES 可逆性加密算法

package com.lock.demo.service;

import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;

import javax.crypto.Cipher;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;

/**
 * @author niunafei
 * @function
 * @email [email protected]
 * @date 2018/12/12  下午2:32
 */
public class AESUtils {

    private static final String AES="AES";
    private static final String CHAR_SET_NAME1="UTF-8";
    private static final String CHAR_SET_NAME2="ASCII";
    private static final String CIPHER_KEY="AES/CBC/PKCS5Padding";

    /**
     * 加密用的Key 可以用26个字母和数字组成 此处使用AES-128-CBC加密模式,key需要为16位。
     */
    private static final String IV_PARAMETER="a0.l954b_107x90l";
    /**
     * 可以用26个字母和数字组成 此处使用AES-128-CBC加密模式,需要为16位。
     */
    private static final String S_KEY="ax7x90.3k_10li5u";

    /**
     * 加密
     * @param param
     * @return
     * @throws Exception
     */
    public static String encryption(String param) throws Exception {
            Cipher cipher= Cipher.getInstance(CIPHER_KEY);
            SecretKeySpec skeySpec = new SecretKeySpec(S_KEY.getBytes(), AES);
            // 使用CBC模式,需要一个向量iv,可增加加密算法的强度
            IvParameterSpec iv = new IvParameterSpec(IV_PARAMETER.getBytes());
            cipher.init(Cipher.ENCRYPT_MODE, skeySpec, iv);
        // 此处使用BASE64做转码。
        return new BASE64Encoder().encode(cipher.doFinal(param.getBytes(CHAR_SET_NAME1)));

    }

    /**
     *  解密
     * @param value
     * @return
     * @throws Exception
     */
    public static String decrypt(String value) throws Exception {
            SecretKeySpec skeySpec = new SecretKeySpec(S_KEY.getBytes(CHAR_SET_NAME2), AES);
            Cipher cipher = Cipher.getInstance(CIPHER_KEY);
            IvParameterSpec iv = new IvParameterSpec(IV_PARAMETER.getBytes());
            cipher.init(Cipher.DECRYPT_MODE, skeySpec, iv);
            // 先用base64解密
            return new String(cipher.doFinal(new BASE64Decoder().decodeBuffer(value)), CHAR_SET_NAME1);
    }

    /**
     测试
     */
    public static void main(String[] args) throws Exception {
        String key="123";
        System.out.println("key="+key);
        //输出 key=123
        String value=AESUtils.encryption(key);
        System.out.println("encryption value="+value);
        //输出 encryption value=OTslJ40Fa9a7ImOmCbmLPw==
        System.out.println("decrypt key="+AESUtils.decrypt(value));
        //输出 decrypt key=123

    }
}

加密结果适用于url参数么?

URLEncoder.encode();URLDecoder.decode() 进行转码即可

url出现了有+,空格,/,?,%,#,&,=等特殊符号的时候,可能在服务器端无法获得正确的参数值,如何是好?
解决办法
将这些字符转化成服务器可以识别的字符,对应关系如下:
URL字符转义

用其它字符替代吧,或用全角的。

+    URL 中+号表示空格                            %2B   
空格 URL中的空格可以用+号或者编码           %20 
/     分隔目录和子目录                              %2F     
?     分隔实际的URL和参数                         %3F     
%    指定特殊字符                                   %25     
#    表示书签                                         %23     
&    URL 中指定的参数间的分隔符                %26     
=    URL 中指定参数的值                           %3D

原文地址:https://www.cnblogs.com/lizm166/p/12193254.html

时间: 2024-08-09 20:13:18

AES 可逆性加密算法的相关文章

RSA与AES混合加密算法的实现

使用 PVRTC 压缩格式创建纹理(Creating textures in the PVRTC compression format) 太阳火神的美丽人生 (http://blog.csdn.net/opengl_es) 本文遵循"署名-非商业用途-保持一致"创作公用协议 转载请保留此句:太阳火神的美丽人生 -  本博客专注于 敏捷开发及移动和物联设备研究:iOS.Android.Html5.Arduino.pcDuino,否则,出自本博客的文章拒绝转载或再转载,谢谢合作. 有关该篇

Java 加密 AES 对称加密算法

题目链接:https://oj.leetcode.com/problems/set-matrix-zeroes/ Given a m x n matrix, if an element is 0, set its entire row and column to 0. Do it in place. 一个个找肯定会超时,我们可以分别用一个行向量和一个列向量进行维护.这样O(m*n) 能出来 class Solution { public: void setZeroes(vector<vector

AES可逆加密算法

分享一段前段时间看到的AES可逆加密算法. 除去常见的MD5等加密方式,如果想要使用一些更加隐蔽的加密方式,则可以使用AES的RijndaelManaged加密算法. 关于加密,有很多复杂的算法,今天只跟大家分享一段摘取的结合动态密钥的对称AES RijndaelManaged加密解密算法,如果大家有兴趣了解更多,我们可以一起深入研究…… static void Main(string[] args) { string key = "8H[=}[email protected](";

AES对称加密算法原理

原著:James McCaffrey 翻译:小刀人 原文出处:MSDN Magazine November 2003 (Encrypt It) 本文的代码下载:msdnmag200311AES.exe (143KB) 本文假设你熟悉 C# 和 位(bit)操作. 摘要 AES(The Advanced Encryption Standard)是美国国家标准与技术研究所用于加密电子数据的规范.它被预期能成为人们公认的加密包括金融.电信和政府数字信息的方法.本文展示了AES的概貌并解析了它使用的算法

破解wifi加密的数据帧,aes/tkip加密算法简要分析

一. 抓取空气中传播的wifi信号 (1).使用wireshark抓包 尝试之后发现,wireshare接受的数据是系统过滤时候的数据,系统接受外界信息的时候,第一步就是确实是不是本网卡的的信息,对照mac地址,如果不相同则丢弃该数据帧,得出结论wireshark不能控制无线网卡抓取空气中的wifi信号. (2).使用commview抓包 CommView是一个用来分析WiFi无线网络的软件,在工作之前commview能够做什么? 1.捕获xxxxxxxxxxxxx(包括:包) 2.统计xxxx

AES 对称加密算法 加密\解密实例

package com.soufun.com; import java.io.UnsupportedEncodingException; import java.security.InvalidKeyException; import java.security.NoSuchAlgorithmException; import java.security.SecureRandom; import java.util.Date; import javax.crypto.BadPaddingExce

【C#公共帮助类】给大家分享一些加密算法 (DES、HashCode、RSA、AES等)

AES 高级加密标准(英语:Advanced Encryption Standard,缩写:AES),在密码学中又称Rijndael加密法,是美国联邦政府采用的一种区块加密标准.这个标准用来替代原先的DES,已经被多方分析且广为全世界所使用.AES先进加密算法是一向被认为牢不可破的加密算法,针对这项加密算法的攻击是异常复杂的,事实上想要完全破解AES花费的时间要以数十亿年计,极大的保证了数据的安全性. 这里有两个加密.解密方法: 一种是带密钥的加密:一种是动态加密,就是不需要密钥,密钥被动态生成

Java 加密解密 对称加密算法 非对称加密算法 MD5 BASE64 AES RSA

[前言] 本文简单的介绍了加密技术相关概念,最后总结了java中现有的加密技术以及用法和样例 [最简单的加密] 1.简单的概念 明文:加密前的信息 密文:机密后的信息 算法:加密或解密的算法 密钥:算法使用的钥匙(读作miyao.正确应该是miyue,可是大家都读miyao) 2.简单的样例 将123456每位数字都加1后得到234567, 当中123456就是明文.234567就是密文.加密密钥就是1,加密算法是每位加 3.对称加密和非对称加密 以上为例. 123456-->234567的加密

我的Android进阶之旅------&gt;Android采用AES+RSA的加密机制对http请求进行加密

前言 未加密的抓包截图 加密之后的抓包截图 基本需求及概念 AES算法 AES基本原理及算法流程 AES算法流程 RSA算法 RSA算法基本原理及流程 RSA算法实现流程 AES与RSA相结合数据加密方案 Android端 AESRSA结合实践 基本要求 基本流程 Android端 服务器端 java版示例 更多参考 前言 最近维护公司APP应用的登录模块,由于测试人员用Fiddler抓包工具抓取到了公司关于登录时候的明文登录信息.虽然使用的是HTTPS的方式进行http请求的,但还是被Fidd