DES加解密

public class DESEncrypt {    /**     * DES解密     * @param decryptString 密文     * @param ivStr 加密key     * @param keyStr 加密偏移量     * @return 明文     * @throws Exception exception     */    public static String decrypt(String decryptString, String keyStr, String ivStr)            throws Exception {        IvParameterSpec iv = new IvParameterSpec(ivStr.getBytes());        SecretKeySpec key = new SecretKeySpec(keyStr.getBytes(), "DES");        Cipher cipher = Cipher.getInstance("DES/CBC/PKCS5Padding");        cipher.init(Cipher.DECRYPT_MODE, key, iv);        return new String(cipher.doFinal(Base64.decode(decryptString, Base64.NO_WRAP)));    }    /**     * DES加密     * @param encryptString 明文     * @param keyStr 解密key     * @param ivStr 偏移量     * @return 密文     * @throws Exception exception     */    public static String encrypt(String encryptString, String keyStr, String ivStr)            throws Exception {        IvParameterSpec iv = new IvParameterSpec(ivStr.getBytes());        DESKeySpec dks = new DESKeySpec(keyStr.getBytes());        SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");        SecretKey key = keyFactory.generateSecret(dks);        Cipher cipher = Cipher.getInstance("DES/CBC/PKCS5Padding");        cipher.init(Cipher.ENCRYPT_MODE, key, iv);        return new String(Base64.encode(cipher.doFinal(encryptString.getBytes()), Base64.NO_WRAP));    }}

RSA加解密(支持RSA分段加解密),因为RSA加解密本身对明文或者密文的长度有限制,所以这里我们的加密算法可以支持分段加解密。

public class RSAEncrypt {    /**     * RSA最大加密明文大小     */    private static final int MAX_ENCRYPT_BLOCK = 117;    /**     * RSA最大解密密文大小     */    private static final int MAX_DECRYPT_BLOCK = 128;    /**     * 将base64编码后的公钥字符串转成PublicKey实例     * @param publicKey 公钥字符     * @return publicKEY     * @throws Exception exception     */    public static PublicKey getPublicKey(String publicKey) throws Exception {        byte[] keyBytes = Base64.decode(publicKey, Base64.NO_WRAP);        X509EncodedKeySpec keySpec = new X509EncodedKeySpec(keyBytes);        KeyFactory keyFactory = KeyFactory.getInstance("RSA");        return keyFactory.generatePublic(keySpec);    }    /**     * 将base64编码后的私钥字符串转成PrivateKey实例     * @param privateKey 私钥字符串     * @return 私钥对象     * @throws Exception exception     */    public static PrivateKey getPrivateKey(String privateKey) throws Exception {        byte[] keyBytes = Base64.decode(privateKey, Base64.NO_WRAP);        PKCS8EncodedKeySpec keySpec = new PKCS8EncodedKeySpec(keyBytes);        KeyFactory keyFactory = KeyFactory.getInstance("RSA");        return keyFactory.generatePrivate(keySpec);    }    /**     * RSA加密     * @param content 待加密文本     * @param publicKey 公钥     * @return 密文     * @throws Exception exception     */    public static String encrypt(String content, PublicKey publicKey) throws Exception {        Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding");//java默认"RSA"="RSA/ECB/PKCS1Padding"        cipher.init(Cipher.ENCRYPT_MODE, publicKey);        byte[] data = content.getBytes();        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 new String(Base64.encode(encryptedData, Base64.NO_WRAP));    }    /**     * RSA解密     * @param content 密文     * @param privateKey 私钥     * @return 明文     * @throws Exception exception     */    public static String decrypt(String content, PrivateKey privateKey) throws Exception {        Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding");        cipher.init(Cipher.DECRYPT_MODE, privateKey);        byte[] encryptedData = Base64.decode(content, Base64.NO_WRAP);        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 new String(decryptedData);    }}

RSA使用公钥进行加密,私钥进行解密。通常情况下,公钥由客户端进行保存,网络请求的时候对数据使用公钥加密。私钥通常保存在服务端,服务端对网络请求使用私钥进行解密。这样可以保障网络请求时候的数据安全!
RSA的公钥和私钥可以在线申请。RSA密钥在线生成

更多相关文章

  1. android加密解密完美教程
  2. android 中使用TextView实现分段显示不同颜色的字符串
  3. 安卓9.0 http请求数据失败解决办法
  4. android java 3des加密 ECB/CBC
  5. android客户端加密代码
  6. Android(安卓)采用MD5注册登录,加密解密
  7. Android中base64加密后的字符串带有“\n”导致出错的问题解决
  8. 关于Android(安卓)混淆的内容总结
  9. Android关于短信加密

随机推荐

  1. absolutelayout 实现图片重叠
  2. Display_获取屏幕宽高
  3. android入门 SeekBar
  4. android listview DataSetObserver
  5. 百度地图locationClient.start()没反应解
  6. Android(安卓)Calendar的学习与运用
  7. android获取recycleview滚动的距离
  8. android 图片遮罩,水印
  9. Qt在Android平台上实现html转PDF的功能
  10. Android游戏Alchemy Classic配方表