android RSA公钥加密 公钥解密,解决乱码问题

原创 2016年05月30日 17:49:24
/**
 * <p>
 * 公钥解密
 * </p>
 *
 * @param encryptedData 已加密数据
 * @param  publicKey  公钥 (无需base64编码,靠,网上的代码为毛说要base64编码,坑啊哥哥们)
 * @return  (已解决解密乱码问题)
 * @throws Exception
 */
public static byte[] decryptByPublicKey(byte[] encryptedData,String publicKey )
        throws Exception {
    X509EncodedKeySpec x509KeySpec = new X509EncodedKeySpec(keyBytes);
    KeyFactory keyFactory = KeyFactory.getInstance(KEY_ALGORITHM);
    Key publicK = keyFactory.generatePublic(x509KeySpec);
    Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding");
    cipher.init(Cipher.DECRYPT_MODE, publicK);
    int inputLen = encryptedData.length;
    ByteArrayOutputStream out = new ByteArrayOutputStream();
    int offSet = 0;
    byte[] cache;
    int i = 0;
    // 对数据分段解密
    while (inputLen - offSet > 0) {
        if (inputLen - offSet > MAX_DECRYPT_BLOCK) {
            cache = cipher.doFinal(encryptedData, offSet, MAX_DECRYPT_BLOCK);
        } else {
            cache = cipher.doFinal(encryptedData, offSet, inputLen - offSet);
        }
        out.write(cache, 0, cache.length);
        i++;
        offSet = i * MAX_DECRYPT_BLOCK;
    }
    byte[] decryptedData = out.toByteArray();
    out.close();
    return decryptedData;
}
/**
 * <p>
 * 公钥加密
 * </p>
 *
 * @param data      源数据
 * @param
 * @return
 * @throws Exception
 */
public static byte[] encryptByPublicKey(byte[] data,String publicKey)
        throws Exception {
    byte[] keyBytes = Base64.decode(publicKey, Base64.DEFAULT);
    X509EncodedKeySpec x509KeySpec = new X509EncodedKeySpec(keyBytes);
    KeyFactory keyFactory = KeyFactory.getInstance(KEY_ALGORITHM);
    Key publicK = keyFactory.generatePublic(x509KeySpec);
    // 对数据加密
    Cipher cipher = Cipher.getInstance("RSA/None/PKCS1Padding");
    cipher.init(Cipher.ENCRYPT_MODE, publicK);
    int inputLen = data.length;
    ByteArrayOutputStream out = new ByteArrayOutputStream();
    int offSet = 0;
    byte[] cache;
    int i = 0;
    // 对数据分段加密
    while (inputLen - offSet > 0) {
        if (inputLen - offSet > MAX_ENCRYPT_BLOCK) {
            cache = cipher.doFinal(data, offSet, MAX_ENCRYPT_BLOCK);
        } else {
            cache = cipher.doFinal(data, offSet, inputLen - offSet);
        }
        out.write(cache, 0, cache.length);
        i++;
        offSet = i * MAX_ENCRYPT_BLOCK;
    }
    byte[] encryptedData = out.toByteArray();
    out.close();
    return encryptedData;
}


注:本方法中base64为util包下  
 android.util.Base64;
另外:方法中公钥 为"ASDFG"这种  ,网上有好多公钥前后有---BIGIN   END—— 这种,在本文中并不适用。
本人菜鸟,不知道问什么,求告知

版权声明:本文为博主原创文章,未经博主允许不得转载。

解决Android客户端RSA解密部分乱码的问题

今天在用rsa界面服务端的数据时,碰到了部分乱码的问题,虽然能解密出正确的数据但是前面会多一堆乱码.一开始以为是编码的问题,可是全都设置成了utf-8也是不行,最后的解决方法如下: 在移动端获取...
  • totcw
  • totcw
  • 2017年05月31日 15:07
  • 1184

androidRSA加密,java解密出现错误或者乱码

后台是java,我是做android的,这是前提。 前两天遇到一个问题,项目要求一些敏感数据用公钥加密之后传过去,或者是后台传过来的数据用公钥解密。 然后就遇到问题了 首先是我解密出现乱码,而且...
  • s706335465
  • s706335465
  • 2015年12月17日 17:56
  • 3230

Android RSA加密算法,解密乱码问题解决DEMO

  • 2016年11月17日 09:14
  • 2.42MB
  • 下载

Android RSA 公钥加密、解密

网上大部分 rsa加密 都是针对java 的,android的也有,但是大部分都是 公钥加密、私钥解密, 用公钥解密(私钥加密)的很少,此文分享中是针对Android使用RSA加密时用到公钥加解密的情...
  • changcsw
  • changcsw
  • 2016年03月22日 18:16
  • 6799

Java 进行 RSA 加解密时不得不考虑到的那些事儿

1. 加密的系统不要具备解密的功能,否则 RSA 可能不太合适公钥加密,私钥解密。加密的系统和解密的系统分开部署,加密的系统不应该同时具备解密的功能,这样即使黑客攻破了加密系统,他拿到的也只是一堆无法...
  • defonds
  • defonds
  • 2015年01月16日 11:56
  • 80362

ios学习--RSA非对称加密(解决解密后会乱码的问题)

在iOS中使用RSA加密解密,需要用到.der和.p12后缀格式的文件,其中.der格式的文件存放的是公钥(Public key)用于加密,.p12格式的文件存放的是私钥(Private key)用于...
  • zzzzzdddddxxxxx
  • zzzzzdddddxxxxx
  • 2016年08月12日 10:39
  • 3155

Android 数据加密之RSA + AES

数据传输加密   在开发应用过程中,客户端与服务端经常需要进行数据传输,涉及到重要隐私信息时,开发者自然会想到对其进行加密,即使传输过程中被“有心人”截取,也不会将信息泄露。对于加密算法,相信不少开...
  • jungle_pig
  • jungle_pig
  • 2017年04月18日 14:33
  • 690

RSA 解密的时候报错 而且有乱码:java.lang.ArrayIndexOutOfBoundsException: too much data for RSA block

报错: 03-22 10:21:20.805 507-507/? E/AndroidRuntime: FATAL EXCEPTION: main 03-22 10:21:20.805 507-507/...
  • Rodulf
  • Rodulf
  • 2016年03月22日 18:38
  • 2127

RSA加密算法遇到长中文字符串分解的问题

RSA算法是目前最安全的算法,因为RSA算法的密钥不需要进行网络传输,所以同一密钥在很长一段时间内不改变也不会被破解。因为RSA的安全性,也常常作为其他性能比较高的算法(如DES,亲测,对同一串DES...
  • u014476088
  • u014476088
  • 2017年06月15日 10:44
  • 1724

Android 获取签名公钥 和 公钥私钥加解密

public class GetPublicKey { /** * 获取签名公钥 * @param mContext * @return *...
  • catoop
  • catoop
  • 2015年11月28日 22:47
  • 6738
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:android RSA公钥加密 公钥解密,解决乱码问题
举报原因:
原因补充:

(最多只允许输入30个字)