android rsa 私钥加密解密,Android网络数据传输安全——实现RSA公钥加密私钥解密...

一,整体流程后台生成一个RSA秘钥对,包括公钥和私钥后台将公钥字符串下发给客户端,然后客户端用此公钥生成一个RSAPublicKey对象,再将手机号密码等数据用此对象加密,客户端将加密的数据发送给后台,后台将加密的数据用私钥解密。image.png二,公私钥你可以利用工具一键生成密钥对访问支付宝官网,进入如下页面,该页面的URL:https://docs.open.alipay.com/291/1...
摘要由CSDN通过智能技术生成

一,整体流程

后台生成一个RSA秘钥对,包括公钥和私钥

后台将公钥字符串下发给客户端,

然后客户端用此公钥生成一个RSAPublicKey对象,再将手机号密码等数据用此对象加密,

客户端将加密的数据发送给后台,

后台将加密的数据用私钥解密。

94d055807538

image.png

二,公私钥

你可以利用工具一键生成密钥对

访问支付宝官网,进入如下页面,该页面的URL:https://docs.open.alipay.com/291/105971

94d055807538

image.png

94d055807538

image.png

94d055807538

image.png

94d055807538

image.png

一般默认的公钥格式是这样的

-----BEGIN PUBLIC KEY-----

MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCiwMSxbRias7DmFkp6V0Qx2nMG+"/n

AuhhR7H/wj62aufaDlUwhzaWQOKXHi+SBVcTM0n+qzhtt4Kmr44MHAqW8NE9Pgzx

UY8S7WVLn9wEGKGpZKlSHlZUdOKUabBFbS7dyBoVTYTkhrfXnOvtJJz5KGeYPT2x

dEwA78dYEmHxvmwhrwIDAQAB

-----END PUBLIC KEY-----

私钥是这样的

-----BEGIN PRIVATE KEY-----

MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBAKLAxLFtGJqzsOYW

SnpXRDHacwYC6GFHsf/CPrZq59oOVTCHNpZA4pceL5IFVxMzSf6rOG23gqavjgwc

Cpbw0T0+DPFRjxLtZUuf3AQYoalkqVIeVlR04pRpsEVtLt3IGhVNhOSGt9ec6+0k

nPkoZ5g9PbF0TADvx1gSYfG+bCGvAgMBAAECgYAXWeceudNs5tk7ufkHopuzN2+H

bkVfJ8U/N+R9kcsgOyw34T6QwlCAdCFJJyD+LT6xnmljPJAvUELmM+PFElpC34e5

cJUFGhwjDax18tb3LW7/MBB/XH1W+9KS5ninn3Homan1x8VIE9104QMLmj2HwDCH

nI9HMXmYVhmzylNFIQJBANgvsTWq3Rw8UOXTY9uMR65Ia4Rz4fr0jyD9UIhF7j5+

dEycncrI9d7XjxgEObcegR8eoCGCALMzEmXyjcDbov8CQQDAuemo/OmHLqpA8tQm

MHhvSdLxV0lruez3ok1gFuqwTtMxBsipLFVkTZMnMqnKY/ZDqFDrXOpom7yvEy5p

BXFRAkAxDTEyMiCVRYI9g2dG619gRgJPPVPq8w5+t7tMEEHsYBjXQTn0RwCynUpU

crD9wagefX5r2+l4v3/PLefH+I3VAkBvcpLmP+qjW57klAeOVfUvFde/7CPvAcNA

qEBqUpZAgjSqYyvieFqg+CMiRa/d89RS56BzmnWLLJP+Ae+Sl60hAkEAuhheSdjL

vaVUq5UZPEtqZAuIRbQHETU7/INSViJeKvaSg9MuXJUG0f98HweMRLxHr1TjcX1c

MGojP9s2ME7b3A==

-----END PRIVATE KEY-----

可以看到都有一个头部和尾部用来表示是公私钥。

但是java中用收到的用于生成加密的对象接收的公钥自串是要把头和尾去掉的也就是这样

去掉头和尾

public static final String publickkey =MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCiwMSxbRias7DmFkp6V0Qx2nMG+

AuhhR7H/wj62aufaDlUwhzaWQOKXHi+SBVcTM0n+qzhtt4Kmr44MHAqW8NE9Pgzx

UY8S7WVLn9wEGKGpZKlSHlZUdOKUabBFbS7dyBoVTYTkhrfXnOvtJJz5KGeYPT2x

dEwA78dYEmHxvmwhrwIDAQAB

三,执行代码

下面是RSAUtil 工具类的代码

/**

* @author: 程龙 on 2019/3/13.

* bolg: https://me.csdn.net/qq_25749749

* RSA算法,实现数据的加密解密。

*/

public class RSAUtil {

/**

* 使用私钥解密

* @param content

* @param private_key

* @param input_charset

* @return

* @throws Exception

*/

public s

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
RSA封装类 ,完整的RSA加密解密 public class RSAUtilEncrypt { public static final String KEY_ALGORTHM = "RSA";// public static final String KEY_ALGORTHM_RSA_ECB_PKCS1PADDING = "RSA/ECB/PKCS1Padding"; public static String RSA_PUBLIC_KEY = "rsa_public_key"; public static String RSA_PRIVATE_KEY = "rsa_private_key"; private int KeySize = 1024; private Map keyMap; private static String RSA = "RSA"; private static PublicKey publickey; public RSAUtilEncrypt(int KeySize,String publickey) { this.KeySize = KeySize; try { this.publickey=generatePublicKeyByString(publickey); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } private RSAPublicKey generatePublicKeyByString(String publicKeyStr) throws Exception { try { BASE64Decoder base64Decoder = new BASE64Decoder(); byte[] buffer = base64Decoder.decodeBuffer(publicKeyStr); X509EncodedKeySpec keySpec = new X509EncodedKeySpec(buffer); KeyFactory keyFactory = KeyFactory.getInstance("RSA"); return (RSAPublicKey) keyFactory.generatePublic(keySpec); } catch (NoSuchAlgorithmException e) { throw new Exception("No Algorthm,Checked by cemung!"); } catch (InvalidKeySpecException e) { throw new Exception("InvalidKeySpec!"); } catch (IOException e) { throw new Exception("Io exception!"); } catch (NullPointerException e) { throw new Exception("Illegle pointer reference!"); } } // Encypt public byte[] RSAEncrypt(byte[] data, RSAPublicKey publickey) throws Exception { Cipher cipher = Cipher.getInstance(KEY_ALGORTHM_RSA_ECB_PKCS1PADDING); cipher.init(Cipher.ENCRYPT_MODE, this.publickey); byte[] cipherbytes = cipher.doFinal(data); return cipherbytes; } // Encypt public byte[] RSAEncrypt(byte[] data) throws Exception { Cipher cipher = Cipher.getInstance(KEY_ALGORTHM_RSA_ECB_PKCS1PADDING); cipher.init(Cipher.ENCRYPT_MODE, this.publickey); byte[] cipherbytes = cipher.doFinal(data); return cipherbytes; } // Get Public key with format byte[] public byte[] getPublicKeyByte() { RSAPublicKey pubkey = (RSAPublicKey) keyMap.get(RSA_PUBLIC_KEY); return pubkey.getEncoded(); } public static byte[] decryptBASE64(String key) throws Exception { return (new BASE64Decoder()).decodeBuffer(key); } public static String encryptBASE64(byte[] key) throws Exception { return (new BASE64Encoder()).encodeBuffer(key); } public static byte[] decryptByPrivateKey(byte[] data, String key) throws Exception { byte[] keyBytes = decryptBASE64(key); PKCS8EncodedKeySpec pkcs8EncodedKeySpec = new PKCS8EncodedKeySpec( keyBytes); KeyFactory keyFactory = KeyFactory.getInstance(KEY_ALGORTHM); Key privateKey = keyFactory.generatePrivate(pkcs8EncodedKeySpec); Cipher cipher = Cipher.getInstance(keyFactory.getAlgorithm()); cipher.init(Cipher.DECRYPT_MODE, privateKey); return cipher.doFinal(data); } public static byte[] encryptByPublicKey(byte[] data, String key) throws Exception { byte[] keyBytes = decryptBASE64(key); X509EncodedKeySpec x509EncodedKeySpec = new X509EncodedKeySpec(keyBytes); KeyFactory keyFactory = KeyFactory.getInstance(KEY_ALGORTHM); Key publicKey = keyFactory.generatePublic(x509EncodedKeySpec); Cipher cipher = Cipher.getInstance(keyFactory.getAlgorithm()); cipher.init(Cipher.ENCRYPT_MODE, publicKey); return cipher.doFinal(data); } public static byte[] decryptByPublicKey(byte[] data, String key) throws Exception { byte[] keyBytes = decryptBASE64(key); X509EncodedKeySpec x509EncodedKeySpec = new X509EncodedKeySpec(keyBytes); KeyFactory keyFactory = KeyFactory.getInstance(KEY_ALGORTHM); Key publicKey = keyFactory.generatePublic(x509EncodedKeySpec); Cipher cipher = Cipher.getInstance(keyFactory.getAlgorithm()); cipher.init(Cipher.DECRYPT_MODE, publicKey); return cipher.doFinal(data); } 使用方法 private RSAUtilEncrypt rsa = new RSAUtilEncrypt(1024, publikey); /* * 给信息加密,获取密文 */ public String getCiphertext(String str_encrode) { try { byte[] estr = rsa.RSAEncrypt(str_encrode.getBytes()); // 密文 String ciphertext = Base64.encodeToString(estr, Base64.DEFAULT); return ciphertext; } catch (Exception e) { e.printStackTrace(); } return null; } 有疑问的留言
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值