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. android 带文字的ImageButton
  2. ch028 Android(安卓)断点续传
  3. Android(安卓)之 五大布局案例
  4. 自定义动画(animation)时set中的各元素效
  5. android dumpsys
  6. Android日记抓取并保存
  7. Android(安卓)控件使用参数集锦
  8. Android控件笔记——在界面中显示及输入
  9. Android(安卓)API中文文档Button
  10. 相对布局相关属性