android RSA 加密

 


  如今互联网如火如荼的进行的同时,你是否觉得网络不安全呢?

 最近研究了 非对称加密解密的算法,服务端私钥加密,客户端 公约解密

 贴上代码 希望对大伙有用


public class RSAEncrypt {

    private static String PRIVATE_KEY = "MIICeAIBADANBgkqhkiG9w0BAQEFAASCAmIwggJeAgEAAoGBANCQmb9rsKZcA3js\r"
            + "NnOkcsVpRB9ESjcmMoH7UEv4YYW/AVIJt5W2Suumk6Rp2IEP0VRAEbA10bX/3c5W\r"
            + "ID442RCU2PyJwXBUtx2Rs8NFC2SqEVzmO7I8K/NCEtI7/4WbhrDn4n/KRrhnS4LI\r"
            + "rpnyvyWcOp7VRsu5tGW36DSDgSLRAgMBAAECgYBDxom/883u8b3LIO+8+ra1QjT5\r"
            + "+CYp78bACJwaY/fFD8HtF+1JwHhuRa564k6R+kLrHvrgiUzB2QkKUWCe97hJnU6o\r"
            + "yxgkeuhq021DzfIz2RAEBRsBbsQjPlU81TSA9QUiGwW2Qk+ZKuY77tkqYW+IJplL\r"
            + "ymPmihXyiUfCQDsOdQJBAP3BupieRSQRwRrYkuZ2xzlPxm6n2Mc+aNqQDlukVnIp\r"
            + "Bb7utBeGtryfyGpGAjvWb2/sMzKq3Sbhd9IXL7Wuw4sCQQDSaJlSXBc8RV5wAOHi\r"
            + "oBXDH0Mm2QVSe32DQqJJLsRB2br6H203kOFo5ugkSdRZvUlfy/IQXBeQQfqc1i5i\r"
            + "B86TAkEA8KVzVt7phO5Nai8vCN5lyqUr8q68tx8pgvSQmTn9PSBIMazgH1uDGtiQ\r"
            + "0K/52FNgtQyT9R3ywreZ0SRp+2t0RwJBAK6ypkqZp7klJ4n7UZGmtSry9AB3RFH9\r"
            + "snKfirsUl2LNcs9l9HqkUmOVBL3MhwGThi6B2RP4QqBGB9zcgFpofP0CQQDfHVX9\r"
            + "/aEEbYXENMv26lgUqmVzNq4HTQrYcbb5RsrhEfFpC7NqPilS4WDiIj5iKmmDv+lz\r"
            + "6ASliX8grlgywjJ2\r";

    private static Cipher cipher = null;
    private static Key privateKey = null;

    static {
        try {
            privateKey = getPrivateKey(PRIVATE_KEY);
            cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding");
            cipher.init(Cipher.DECRYPT_MODE, privateKey);
        } catch (Exception e) {
            // ignore
        }
    }

    public static String decode(String str) {
        if (cipher == null)
            return null;

        try {
            byte[] enBytes = Base64.decode(str.getBytes(), 0);
            byte[] deBytes = cipher.doFinal(enBytes);
            return new String(deBytes);
        } catch (Exception e) {
            return null;
        }
    }

    public static PrivateKey getPrivateKey(String key) throws Exception {
        byte[] enBytes = Base64.decode(key.getBytes(), 0);
        PKCS8EncodedKeySpec keySpec = new PKCS8EncodedKeySpec(enBytes);
        KeyFactory keyFactory = KeyFactory.getInstance("RSA");
        PrivateKey privateKey = keyFactory.generatePrivate(keySpec);
        return privateKey;
    }

    public static PublicKey getRSAPublicKey(String publicKeyStr)
            throws Exception {
        try {
            byte[] enBytes = Base64.encode(publicKeyStr.getBytes(),
                    Base64.DEFAULT);
            KeyFactory keyFactory = KeyFactory
                    .getInstance("RSA/ECB/PKCS1Padding");
            X509EncodedKeySpec keySpec = new X509EncodedKeySpec(enBytes);
            return keyFactory.generatePublic(keySpec);
        } catch (Exception e) {
            throw null;
        }
    }
}

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、付费专栏及课程。

余额充值