RSA加密解密

来源:互联网 发布:北京软件开发学校 编辑:程序博客网 时间:2024/06/04 18:33

RSA 是常用的非对称加密算法,

待加密的字节数不能超过密钥的长度值除以 8 再减去 11,而加密后得到密文的字节数,正好是密钥的长度值除以 8。

所以,如果要加密较长的数据,则需要采用分段加解密

//公钥(BASE64编码)private static final String PUBLIC_KEY = "YOUR PUBLICKEY STRING";/** * 公钥解密 * @param encrypt 已加密字符串 */public static String decryptByPublicKey(String encrypt) {    try {        //获取PublicKey        byte[] keyBytes = Base64.decodeBase64(PUBLIC_KEY);        X509EncodedKeySpec x509KeySpec = new X509EncodedKeySpec(keyBytes);        KeyFactory keyFactory = KeyFactory.getInstance("RSA");        PublicKey publicK = keyFactory.generatePublic(x509KeySpec);        Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding");        cipher.init(Cipher.DECRYPT_MODE, publicK);        // 注意:当cipher = Cipher.getInstance("RSA")时,此方法在java和android运行结果不同,android返回的byte[]头部会多出许多-1值        // solve:修改成Cipher.getInstance("RSA/ECB/PKCS1Padding")        byte[] decryptedData = cipher.doFinal(Base64.decodeBase64(encrypt));        return new String(decryptedData);    } catch (Exception e) {        e.printStackTrace();        return null;    }}
原创粉丝点击