Android加密篇 RSA
Posted 彭老希
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android加密篇 RSA相关的知识,希望对你有一定的参考价值。
使用场景
文件或数据在本地使用公钥或私钥加密,加密后的数据传送到服务器,服务器使用同一套密钥中的私钥或者公钥进行解密。
import android.util.Base64;
import java.security.InvalidKeyException;
import java.security.Key;
import java.security.KeyPair;
import java.security.KeyPairGenerator;
import java.security.NoSuchAlgorithmException;
import java.security.PrivateKey;
import java.security.PublicKey;
import javax.crypto.Cipher;
import javax.crypto.NoSuchPaddingException;
public class RSAUtils
//构建Cipher实例时所传入的的字符串,默认为"RSA/NONE/PKCS1Padding"
private static String sTransform = "RSA/NONE/PKCS1Padding";
//进行Base64转码时的flag设置,默认为Base64.DEFAULT
private static int sBase64Mode = Base64.DEFAULT;
//初始化方法,设置参数
public static void init(String transform,int base64Mode)
sTransform = transform;
sBase64Mode = base64Mode;
//产生密钥对
public static KeyPair generateRSAKeyPair(int keyLength)
KeyPair keyPair=null;
try
KeyPairGenerator keyPairGenerator=KeyPairGenerator.getInstance("RSA");
//设置密钥长度
keyPairGenerator.initialize(keyLength);
//产生密钥对
keyPair=keyPairGenerator.generateKeyPair();
catch (NoSuchAlgorithmException e)
e.printStackTrace();
return keyPair;
/**
* 加密或解密数据的通用的方法,srcData:待处理的数据;key:公钥或者私钥,mode指
* 加密还是解密,值为Cipher.ENCRYPT_MODE或者Cipher.DECRYPT_MODE
*/
public static byte[]processDAta(byte[]srcData, Key key,int mode)
//用来保存处理的结果
byte[]resultBytes=null;
//构建Cipher对象,需要传入一个字符串,格式必须为"algorithm/mode/padding"或者"algorithm/",意为"算法/加密模式/填充方式"
try
Cipher cipher=Cipher.getInstance("RSA/NONE/PKCS1Padding");
//初始化Cipher,mode指定是加密还是解密,key为公钥或密钥
cipher.init(mode,key);
//处理数据
resultBytes=cipher.doFinal(srcData);
catch (Exception e)
e.printStackTrace();
return resultBytes;
//使用公钥加密数据,结果用Base64转码
public static String encryptDataByPublicKey(byte[]srcData, PublicKey publicKey)
byte[]resultBytes=processDAta(srcData,publicKey,Cipher.ENCRYPT_MODE);
return Base64.encodeToString(resultBytes,sBase64Mode);
//使用私钥解密,结果用Base64转码
public static byte[]decryptDataByPrivate(String encryptedData, PrivateKey privateKey)
byte[]bytes=Base64.decode(encryptedData,sBase64Mode);
return processDAta(bytes,privateKey,Cipher.DECRYPT_MODE);
//使用私钥解密,返回解码数据
public static String decryptToStrByPrivate(String encryptedData,PrivateKey privateKey)
return new String(decryptDataByPrivate(encryptedData,privateKey));
以上是关于Android加密篇 RSA的主要内容,如果未能解决你的问题,请参考以下文章