Android加密篇 AES

Android加密篇 AESAES加密是一种高级加密标准,是一种区块加密标准。它是一个对称密码,就是说加密和解密用相同的密钥。WPA/WPA2经常用的加密方式就是AES加密算法。importjava.io.UnsupportedEncodingException;importjavax.crypto.Cipher;importjavax.crypto.spec.SecretKeySpec;publicclassAESUtils3{/*算法/模式/填充*/privatestatic.

大家好,又见面了,我是你们的朋友全栈君。

在这里插入图片描述

AES加密是一种高级加密标准,是一种区块加密标准。它是一个对称密码,就是说加密和解密用相同的密钥。WPA/WPA2经常用的加密方式就是AES加密算法。

import java.io.UnsupportedEncodingException;

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

public class AESUtils3 { 
   
    /* 算法/模式/填充 */
    private static final String CipherMode = "AES/ECB/PKCS5Padding";

    /* 创建密钥 */
    private static SecretKeySpec createKey(String password) { 
   
        byte[] data = null;
        if (password == null) { 
   
            password = "";
        }
        StringBuffer sb = new StringBuffer(32);
        sb.append(password);
        while (sb.length() < 32) { 
   
            sb.append("0");
        }
        if (sb.length() > 32) { 
   
            sb.setLength(32);
        }

        try { 
   
            data = sb.toString().getBytes("UTF-8");
        } catch (UnsupportedEncodingException e) { 
   
            e.printStackTrace();
        }
        return new SecretKeySpec(data, "AES");
    }

    /* 加密字节数据 */
    public static byte[] encrypt(byte[] content, String password) { 
   
        try { 
   
            SecretKeySpec key = createKey(password);
            System.out.println(key);
            Cipher cipher = Cipher.getInstance(CipherMode);
            cipher.init(Cipher.ENCRYPT_MODE, key);
            byte[] result = cipher.doFinal(content);
            return result;
        } catch (Exception e) { 
   
            e.printStackTrace();
        }
        return null;
    }

    /*加密(结果为16进制字符串) */
    public static String encrypt(String content, String password) { 
   
        byte[] data = null;
        try { 
   
            data = content.getBytes("UTF-8");
        } catch (Exception e) { 
   
            e.printStackTrace();
        }
        data = encrypt(data, password);
        String result = byte2hex(data);
        return result;
    }

    /*解密字节数组*/
    public static byte[] decrypt(byte[] content, String password) { 
   
        try { 
   
            SecretKeySpec key = createKey(password);
            Cipher cipher = Cipher.getInstance(CipherMode);
            cipher.init(Cipher.DECRYPT_MODE, key);
            byte[] result = cipher.doFinal(content);
            return result;
        } catch (Exception e) { 
   
            e.printStackTrace();
        }
        return null;
    }

    /*解密16进制的字符串为字符串 */
    public static String decrypt(String content, String password) { 
   
        byte[] data = null;
        try { 
   
            data = hex2byte(content);
        } catch (Exception e) { 
   
            e.printStackTrace();
        }
        data = decrypt(data, password);
        if (data == null) return null;
        String result = null;
        try { 
   
            result = new String(data, "UTF-8");
        } catch (UnsupportedEncodingException e) { 
   
            e.printStackTrace();
        }
        return result;
    }

    /*字节数组转成16进制字符串 */
    public static String byte2hex(byte[] b) { 
    // 一个字节的数,
        StringBuffer sb = new StringBuffer(b.length * 2);
        String tmp = "";
        for (int n = 0; n < b.length; n++) { 
   
            // 整数转成十六进制表示
            tmp = (java.lang.Integer.toHexString(b[n] & 0XFF));
            if (tmp.length() == 1) { 
   
                sb.append("0");
            }
            sb.append(tmp);
        }
        return sb.toString().toUpperCase(); // 转成大写
    }

    /*将hex字符串转换成字节数组 */
    private static byte[] hex2byte(String inputString) { 
   
        if (inputString == null || inputString.length() < 2) { 
   
            return new byte[0];
        }
        inputString = inputString.toLowerCase();
        int l = inputString.length() / 2;
        byte[] result = new byte[l];
        for (int i = 0; i < l; ++i) { 
   
            String tmp = inputString.substring(2 * i, 2 * i + 2);
            result[i] = (byte) (Integer.parseInt(tmp, 16) & 0xFF);
        }
        return result;
    }
}
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/145447.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 大数据时代来临,数据应用随处可见吗_随着大数据时代的来临

    大数据时代来临,数据应用随处可见吗_随着大数据时代的来临序:大数据之所以可能成为一个时代,在很多程度上是因为这是一个可以由社会各界广泛参与,八面出击,处处结果的社会运动,而不仅仅是少数专家学者的研究对象。数据产生于各行各业,这场变革也必将影响到各行各业,因此,机遇也蕴含于各行各业。致力于IT创业的人们紧紧盯着这个市场,洞察着每一个机遇。数据对于科学进步有推动的作用,而海量数据对数据的分析既带来了机遇,也构成了新的挑战。随着大数据的迅速发展,许多企业开始…

    2022年9月28日
    4
  • linux使用客户端连接redis,使用redis客户端连接windows和linux下的redis并解决无法连接redis的问题…[通俗易懂]

    linux使用客户端连接redis,使用redis客户端连接windows和linux下的redis并解决无法连接redis的问题…[通俗易懂]搭建环境:linux是centos7.4(请注意centos7以下版本的防火墙跟centos7以上的不同,使用redis客户端连接redis时会有区别,建议使用centos7以上版本)一、下载redis客户端二、连接windows下的redis服务器1、确保redis服务器是启动状态2、创建连接打开如下页面:3、使用命令窗口右键点击localhost,选择Console正常使用各种redis命令三…

    2022年9月13日
    2
  • 公有云和私有云的对比和区别「建议收藏」

    公有云和私有云的对比和区别「建议收藏」什么是云?云技术是指在广域网或局域网内将硬件、软件、网络等系列资源统一起来,实现数据的计算、储存、处理和共享的一种托管技术。例如云计算:将计算作为一种服务交付给用户而不是一种产品,在这种服务中,计算资源、软件和信息如同日常的水、电一样通过互联网交付给计算机和其他的计算媒介。​云计算的三种模式​按照商业模式的不同,云计算可以被分为三大类:公有云、私有云和混合云。这三种模式构成了云基础设施构建和消费的基础。​​1、公有云(PublicClouds),“公有”反映了这类云服务并非用户

    2022年6月29日
    28
  • java递归函数详解_java保存递归结果

    java递归函数详解_java保存递归结果一、递归函数,通俗的说就是函数本身自己调用自己…如:n!=n(n-1)!你定义函数f(n)=nf(n-1)而f(n-1)又是这个定义的函数。。这就是递归二、为什么要用递归:递归的目的是简化程序设计,使程序易读三、递归的弊端:尽管非递归函数效率高,但较难编程,可读性较差。递归函数的缺点是添加�了系统开销,也就是说,每递归一次,栈内存就多占用一截四、递归的条件:需有完毕任务的语句,需满足递归的要求…

    2022年9月18日
    2
  • dpdk技术详解_dpdk acl

    dpdk技术详解_dpdk acligb_uio是dpdk内部实现的将网卡映射到用户态的内核模块,它是uio模块的一个实例。igb_uio是一种pci驱动,将网卡绑定到igb_uio隔离了网卡的内核驱动,同时igb_uio完成网卡中断内核态初始化并将中断信号映射到用户态。igb_uio与uio模块密切相关,我将从uio模块着手分析igb_uio模块的工作原理。uio模块分析uio可以看做是一种字符设备驱动,在此驱动中注册了单独的file_operations函数表,uio设备可以看做是

    2025年7月29日
    2
  • 懒加载(Lazy Loading) – MyBatis懒加载 – Spring懒加载

    懒加载(Lazy Loading) – MyBatis懒加载 – Spring懒加载文章目录懒加载(LazyLoading)MyBatis中懒加载的使用Spring中懒加载的使用懒加载(LazyLoading)  懒加载也叫“延迟价值”,核心思想是把对象的实例化延迟到真正调用该对象的时候,这样做的好处是可以减轻大量对象在实例化时对资源的消耗,而不是在程序初始化的时候就预先将对象实例化。另外“懒加载”可以将对象的实例化代码从初始化方法中独立出来,从而提高代码的可读性,以便于代码能够更好地组织。  特别是在web应用程序中,它能够在用户滚动页面的时候自动获取更多的数据,而新得到的数据

    2025年6月7日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号