`
v7sky
  • 浏览: 76487 次
文章分类
社区版块
存档分类
最新评论

一段常用的加解密代码demo

阅读更多
贴一段常用的加解密代码

用途:

App和后端通信时,可对参数加密,防止请求伪造或被劫持后拿到一些敏感数据。
App提交加密后的参数值,同时带上kid;服务端通过kid,拿到对应的秘钥,通过AES算法解密参数值。
当然了,不同的kid可以对应不同的秘钥和加密算法。

注意:秘钥字符串为16进制数字的字符串标识,字符范围0-9 a-f

package xx.demo.decrypt;

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

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

public class Main {

    //这里测试发现,加密时必须使用PKCS5Padding填充模式, 解密时,则PKCS5Padding和NoPadding 都可以
    //至于原理,待研究
    static String[] conf = new String[] {"1.0.0", "ab3d2e93fc3ff8bd2d48e3fa39750be7", "AES", "AES/ECB/PKCS5Padding", "AES/ECB/PKCS5Padding"};
    static String _source ="{this is json}";
    static String _kid = "1.0.0";

    public static void main(String[] args) throws Exception {

        //加密过程: 与解密过程相反
        String encrypt = encrypt(_source, _kid);
        System.out.println(encrypt);

        //解密过程: 加密字符串->Base64解码字节数组->Crypt解密取得字节数组->utf8编码取得字符串
        String src = decrypt(encrypt, _kid);
        System.out.println(src);
    }

    /**
     * 加密
     * @param source 原文
     * @param kid 秘钥对应的key
     * @return
     * @throws Exception
     */
    public static String encrypt(String source,String kid) throws Exception {

        byte[] bytes = source.getBytes("UTF-8");

        SecretKey keytmp = new SecretKeySpec(hexString2Byte(conf[1]), conf[2]);
        Cipher cp_en = Cipher.getInstance(conf[3]);  //加密
        cp_en.init(Cipher.ENCRYPT_MODE, keytmp);

        byte[] encrypt = cp_en.doFinal(bytes);

        byte[] base64Encrypt = Base64.encodeBase64(encrypt);
        String edata = new String(base64Encrypt, "UTF-8");

        return edata;
    }

    /**
     * 解密
     * @param data 密文
     * @param kid 秘钥对应的key
     * @return
     * @throws Exception
     */
    public static String decrypt(String data, String kid) throws Exception {

        byte[] original_bytes = Base64.decodeBase64(data);

        SecretKey keytmp = new SecretKeySpec(hexString2Byte(conf[1]), conf[2]);
        Cipher cp_de = Cipher.getInstance(conf[4]);  //解密
        cp_de.init(Cipher.DECRYPT_MODE, keytmp);

        byte[] zipped = cp_de.doFinal(original_bytes);

        String content =  new String(zipped, "UTF-8");
        return content;
    }

    /**
     * 16进制字符串转为byte[]
     * 举例  0xf23a  -> byte[]{0xf2,0x3a} 0xf2 = -14, 0x3a = 58
     * @param str (字符范围:0-9 a-f)
     * @return
     */
    public static byte[] hexString2Byte(String hexStr) {
        String str =  hexStr.toLowerCase();
        for (int i = 0; i < result.length; i++) {
            byte b = (byte) ((((getStrIndex(str.charAt(2 * i))) & 0x0f) << 4) | ((getStrIndex(str.charAt(2 * i + 1))) & 0x0f));
            result[i] = b;
        }
        return result;
    }

    public static int getStrIndex(char c) {
        return "0123456789abcdef".indexOf(c);
    }
}
0
1
分享到:
评论

相关推荐

    rc4 c++ 加密解密 代码 DEMO

    在这个C++ DEMO中,我们将会探讨RC4加密和解密的基本原理以及如何在C++环境中实现它。 RC4算法的核心思想是通过一个名为“状态”的256字节的数组进行一系列的交换操作,这个过程被称为密钥流生成(Key Stream ...

    MD5编码、MD5加密解密demo

    在提供的"md5-demo"文件中,可能包含的是一段示例代码,用于演示如何在编程环境中实现MD5编码。常见的应用场景可能是对用户密码进行哈希处理,存储哈希值而非明文密码,以保护用户隐私。在进行MD5编码时,会先将明文...

    常见加解密及数字签名Demo

    本示例"常见加解密及数字签名Demo"旨在提供一个实践性的平台,帮助开发者理解和应用这些概念。以下将详细介绍这两个主题以及可能涉及的相关知识点。 首先,加解密是确保数据安全的基本手段。加密是将明文信息转化为...

    base64加密解密demo

    这个示例可能包含一段代码,展示了如何在编程环境中实现Base64的加密和解密功能。常见的编程语言如Python、Java、JavaScript都有内置的库函数支持Base64操作。 在实际应用中,Base64加密通常不被视为安全的加密手段...

    一套简单实用的字符串加密解密Demo(含源码)

    总之,这套"简单实用的字符串加密解密Demo"是一个很好的学习和实践平台,它可以帮助开发者了解加密解密的基本概念,同时提供了一种在实际项目中快速实现数据加密的途径。不过,对于专业级别的数据安全,还需要结合更...

    RSA非对称加密解密Delphi源码

    "RSA加解密及公钥密生成工具"这个文件可能是包含上述功能的Delphi源码文件或者一个简单的GUI应用程序,它提供了一个用户友好的界面,使得用户能够轻松地生成RSA密钥对,并进行加密和解密操作。 通过学习和理解这段...

    AES算法加解密的源代码,真正可支持超长字符串加密

    目前上传到aes代码,基本一段代码,其实都只能16个char编码,给到demo能正确解出,长了就失败,花了我不少时间才发现这个问题。本人简单修复了下,使用循环分段编码,再循环分段解码,前后文能一致。 AES的基本要求...

    使用LibTomCrypt实现RSA加密解密算法,公钥、私钥分离

    最近研究非对称算法,发现LibTomCrypt库算法完善并且方便,但网上的实现了RSA算法的并不多,有实现了RSA算法的代码,但是加密和解密...这段代码生成key后提取了公钥和私钥,多次算法验证并记录加密解密时间,欢迎下载。

    PB加密解密20150226版

    DLL是Windows操作系统的一种共享代码机制,允许多个程序同时使用同一段代码,节省内存并简化软件维护。 `test.pbl`、`test.pbt`和`test.pbw`是PowerBuilder(PB)相关的文件: - **PBL**:PowerBuilder Library,...

    RSA加密入门demo

    - 示例使用:展示如何使用这些函数对一段文本进行加密和解密。 在压缩包文件"dj_rsa"中,可能包含了如下内容: - 一个源代码文件(如Python或Java),实现RSA加密解密的函数。 - 测试用例,用于演示如何调用这些...

    C#-3DES-DLL及DEMO

    在IT领域,加密技术是确保数据...通过理解和使用这个资源,不仅可以学习到3DES加密算法的工作原理,还能掌握在C#中实现和测试加密解密代码的方法。这对于增强应用程序的安全性,保护敏感数据不被非法访问具有重要意义。

    IOS打包Bundle与加载Demo

    我们将通过一个简单的Demo来阐述整个过程。 首先,我们创建一个新的Bundle项目。在Xcode中,选择`File` -&gt; `New` -&gt; `Target`,然后选择`Bundle`模板。给这个新的Bundle项目命名,比如"ResourcesBundle",并添加到...

    load_dll_demo.zip_加密解密_C/C++_

    在Windows操作系统中,DLL文件是一种可执行代码库,允许多个程序共享同一段代码,从而节省内存和提高效率。在这个特定的案例中,"load_dll_demo"可能是演示如何在C或C++程序中加载DLL,并可能展示了在加载过程中进行...

    C#.zip_BU4_DEMO_MFC_c# AES 加密_c# 加密

    描述“加密Demo,源码,C#,AES加密,加密工具”表明这是一段用于演示的C#源代码,该代码可能是一个简单的加密工具,使用了AES加密算法。这样的工具通常会提供一个用户界面,允许用户输入明文,然后将其加密为密文,或者...

    AES-128-CBC加密Base64编码Demo

    IV是随机生成的一段数据,用于确保即使相同的明文在不同时间加密也会得到不同的密文,增加了安全性。密钥是加密和解密时使用的秘密信息,必须在发送方和接收方之间共享。 这个Demo可能包括以下步骤: 1. 生成128位...

    根据BASE64Decoder的对称加密的demo

    以下是一段使用AES进行对称加密和解密的基本步骤: 1. **生成密钥**:首先,我们需要创建一个密钥,这通常通过`KeyGenerator`类完成。例如,对于AES,我们可以指定AES算法并生成密钥。 ```java KeyGenerator ...

    成百上千个Java 源码DEMO 4(1-4是独立压缩包)

    Y坐标、得到X坐标,Y坐标值、绘制火焰效果Image…… Java加密解密工具集 JCT v1.0源码包 5个目标文件 内容索引:JAVA源码,综合应用,JCT,加密解密 WDSsoft的一款免费源代码 JCT 1.0,它是一个Java加密解密常用工具包。...

    AES和MD5加密Demo

    开发者需要了解如何导入和使用这些库,然后根据AES和MD5的算法原理编写代码,将加密和解密逻辑集成到DEMO程序中。 **应用与安全性** AES适用于保护大量数据的机密性,如存储和传输文件。而MD5虽然不适用于安全认证...

    成百上千个Java 源码DEMO 3(1-4是独立压缩包)

    Y坐标、得到X坐标,Y坐标值、绘制火焰效果Image…… Java加密解密工具集 JCT v1.0源码包 5个目标文件 内容索引:JAVA源码,综合应用,JCT,加密解密 WDSsoft的一款免费源代码 JCT 1.0,它是一个Java加密解密常用工具包。...

Global site tag (gtag.js) - Google Analytics