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—— 这种,在本文中并不适用。
本人菜鸟,不知道问什么,求告知

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

Delphi7高级应用开发随书源码

  • 2003年04月30日 00:00
  • 676KB
  • 下载

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

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

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

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

Android RSA 公钥加密、解密

网上大部分 rsa加密 都是针对java 的,android的也有,但是大部分都是 公钥加密、私钥解密, 用公钥解密(私钥加密)的很少,此文分享中是针对Android使用RSA加密时用到公钥加解密的情...

RSA非对称性前端加密后端解密

参考:http://netsecurity.51cto.com/art/201108/287971.htm 在加密算法中又分为对称加密和非对称加密。 对称加密中所有人都用同一个密钥,只要其中一个人的密...

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

在iOS中使用RSA加密解密,需要用到.der和.p12后缀格式的文件,其中.der格式的文件存放的是公钥(Public key)用于加密,.p12格式的文件存放的是私钥(Private key)用于...

利用RSA加密的时候接受到的有些参数乱码

场景回顾 本地数据库 运行 前端正常,但把数据库地址改成 公司的数据地址 出现乱码 ,同样的Java代码,只是连接不通的数据库 。...

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

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

android RSA 加密实现

一直用的MD5加密方式,最近服务器需要更换RSA加密方式,据悉是因为RSA更安全吧,查阅资料之后实现了。 第一步: 将服务给你的rsa公钥copy到assets文件下(加密只需要公钥,服务器端游对应的...

json在继承关系当中的反序列化

问题描述当收到子类的json字符串的时候,如果用父类来进行反序列化,那就会出现数据丢失的情况。具体如下: Family包含有Child,Child有两个子类,一个是Son,另一个是Daughter。...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:android RSA公钥加密 公钥解密,解决乱码问题
举报原因:
原因补充:

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