ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

JAVA 和ANDROID AES加密

2019-09-06 10:00:24  阅读:205  来源: 互联网

标签:AES JAVA String val java Cipher import ANDROID


 最近项目 服务端使用的是PHP的openssl的AES加密,Android使用openssl要用到JNI, 比较麻烦。 其实java也有自己AES加密, 效果跟openssl的AES加密一样的 。 需要的第三方jar包 bcprov

java:

package com.qiang.kotlin;

import javax.crypto.Cipher;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;
import java.security.AlgorithmParameters;
import java.security.Key;
import java.security.SecureRandom;
import java.security.Security;
import java.util.Base64;
import java.util.Random;

public class Demo2 {


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

        String str =  encrypt("888888","1111400887638100","2222400887638100");
        System.out.println(str);;
    }

    /***
     *
     * @param data
     * @param sessionKey key 必须16位
     * @param iv  偏移值必须16位
     * @return
     * @throws Exception
     */
    public static String encrypt(String data,String sessionKey,String iv) throws Exception {


        byte[] dataByte = data.getBytes();
        byte[] keyByte = sessionKey.getBytes();
        System.out.println("keyByte.length = "+keyByte.length);
        byte[] ivByte = iv.getBytes();
        System.out.println("ivByte.length = "+ivByte.length);


        String encryptedData = null;
        Security.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider());
        //指定算法,模式,填充方式,创建一个Cipher
        Cipher cipher =Cipher.getInstance("AES/CBC/PKCS7Padding");

        //生成Key对象
        Key sKeySpec = new SecretKeySpec(keyByte, "AES");

        //把向量初始化到算法参数
        AlgorithmParameters params = AlgorithmParameters.getInstance("AES");
        params.init(new IvParameterSpec(ivByte));

        //指定用途,密钥,参数 初始化Cipher对象
        cipher.init(Cipher.ENCRYPT_MODE, sKeySpec, params);

        //指定加密
        byte[] result = cipher.doFinal(dataByte);

        //对结果进行Base64编码,否则会得到一串乱码,不便于后续操作
        Base64.Encoder encoder = Base64.getEncoder();
        encryptedData = encoder.encodeToString(result);


        return encryptedData;
    }
}

android 用kotlin实现  由于Base64 android o 才能 使用android.util.Base64 



import java.security.AlgorithmParameters

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

import java.security.Security

import android.util.Base64
import com.dcit.dcsdk.ext.logd


object AesUtils {

    //密钥
    val KEY = "Dcit400887638100"
    //偏移量
    val IV = "Dcit400887638100"


    @Throws(Exception::class)
    fun encrypt(psd: String): String {

        val dataByte = psd.toByteArray()
        val keyByte = KEY.toByteArray()
        val ivByte = IV.toByteArray()

        Security.addProvider(org.bouncycastle.jce.provider.BouncyCastleProvider())
        //指定算法,模式,填充方式,创建一个Cipher
        val cipher = Cipher.getInstance("AES/CBC/PKCS7Padding")
        //生成Key对象
        val sKeySpec = SecretKeySpec(keyByte, "AES")
        //把向量初始化到算法参数
        val params = AlgorithmParameters.getInstance("AES")
        params.init(IvParameterSpec(ivByte))
        //指定用途,密钥,参数 初始化Cipher对象
        cipher.init(Cipher.ENCRYPT_MODE, sKeySpec, params)

        //指定加密
        val bytes = cipher.doFinal(dataByte)
        val result = String(Base64.decode(bytes, Base64.DEFAULT))
        logd("encrypt resultStr = $result ")

        return  result
    }
}

 

标签:AES,JAVA,String,val,java,Cipher,import,ANDROID
来源: https://blog.csdn.net/zhang2740605/article/details/100573451

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有