当服务端为PHP时Android端的RSA加密

原创 2016年08月30日 16:41:17

这是实际项目里封装的一个工具类,代码如下微笑:

import android.util.Base64;

import java.security.KeyFactory;
import java.security.PublicKey;
import java.security.spec.X509EncodedKeySpec;

import javax.crypto.Cipher;

public class RsaUtil {
    private static final String ALGORITHM = "RSA";
    private static final String PUBLIC_KEY =//表示形式为 可以有换行 无空格无--begin--       "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCzlJ2qW0IqiB5F13Awr2vlMjP6" + "\r\n" +
            "ueXOmCG4+EGJx66dzRm35l+8JyCE+j1JUVB9DnsP9raznNvrfmLP83qgpim2chHt" + "\r\n" +
            "JINS2+CtzXVWwPaZtFzHgUE4X2PjSLRxH5CNOB8bb7KITmL2cerXdhHrO4q+Ldcq" + "\r\n" +
            "uu2LKUsDL3HS5YiIkwIDAQAB";

    /**
     * 获得公钥
     *
     * @param algorithm 算法
     * @param key       公钥文本
     */
    private static PublicKey getPublicKeyFromX509(String algorithm, String key) throws Exception {
        byte[] decodedKey = Base64.decode(key, Base64.DEFAULT);
        X509EncodedKeySpec x509 = new X509EncodedKeySpec(decodedKey);
        KeyFactory keyFactory = KeyFactory.getInstance(algorithm);
        return keyFactory.generatePublic(x509);
    }

    /**
     * 使用公钥加密
     *
     * @param content 需要加密的明文 如"123456"
     * @return 加密后的密文,相同明文的所生成的密文是动态变化的,即是不同的,格式如:
     * BXYIdUWYHZjxRM1Pkm8OxVL1ID5mm7HInvNMjwWsRLx9rymm2XadhnxBDDYYnN+i//3wuDQdx/vK
     * BUXygXwIOJwCckme4qpRFW5ANZrESyxRyTCL2JBcgzEVSc0bugXOsvpqbXQGvSY1d8PRSaSpoP19
     * AX3+U5oAh4AWWZZIojg=
     */
    public static String encryptByPublic(String content) {
        try {
            PublicKey publicKey = getPublicKeyFromX509(ALGORITHM, PUBLIC_KEY);
            Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding");//此处有黄色警告可以不用管他
       cipher.init(Cipher.ENCRYPT_MODE, publicKey);
            byte plaintext[] = content.getBytes("UTF-8");
            byte[] output = cipher.doFinal(plaintext);
            return new String(Base64.encode(output, Base64.DEFAULT));
        } catch (Exception e) {
            return null;
        }
    }
}

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

相关文章推荐

RSA客户端(android/ios)与服务端的通信实现

RSA是什么玩意这里就不再说了,大家可以自己搜索,不说废话,直接上正文 需求 客户端(android/ios)向服务端发送一串已经协议好的公钥加密数据到服务端,服务端使用私钥对公钥进行解码 思...

Android和IOS关于RSA加密以及服务端解密的研究实现

一、  密钥对的生成 RSA加密解密,类似于支付宝中的加解密功能,以前的app使用的是DES加密即对称加密算法,只需要一个密钥;而采用RSA实现加解密需要一个密钥对,即公钥和私钥。所以首先要做的操作是...

RSA和AES在c#服务端和android客户端之间的加密解密

记得去年上半年做了个AES和RSA加密解密的功能,最近又回到了这里。不同的是,今年这同事开始的时候给我的不是cer证书,而是Base64,或者16进制的modules和exponent,然后有点束手无...

Android客户端与PHP服务端的数据交互

最近在学习Android客户端,刚好学到了Android的网络应用,钻研了一下,写一篇博客来记录学习心得。由于安卓系统一般是作为客户端,所以我们除了需要编写客户端之外,还需要自己写一个服务端,这里的服...

即时通讯 - Android、iOS、J2EE服务端的非对称加密传输数据

在一个平台上进行非对称加密是So easy的事情,上网一找一大把。可是要想在多个平台上使用非对称加密来进行数据通讯,网上就不太好找现成可用的例子了。 下面逐步来说明一下,如何做这件事情吧。 首先到网上...

JS客户端RSA加密,Java服务端解密

在客户端浏览器,Javascript使用RSA算法,以公钥对密码进行加密,服务端使用相应的私钥进行解密。一般用于注册时或登录时填写的密码。  Java引用到的包:  commons-lang  ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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