1.
public SecretKey secretKey; public byte[] encrypt; public KeyPair keyPair; public byte[] rsaEncrypt; /** * BASE 64 * * @param view */ public void base64encode(View view) { //文本编码 base64encoder = BASE64.base64encoder(STR_BASE64); Log.e(TAG, base64encoder); } public void base64decode(View view) { if (base64encoder != null) { //文本解码 String base64decode = BASE64.base64decode(base64encoder); Log.e(TAG, base64decode); } } /** * MD5s * @param view */ public void md5(View view) { byte[] md5 = MD5.getMD5(STR_MD5.getBytes()); StringBuilder sb = new StringBuilder(); for (byte b : md5) { sb.append(b); } Log.e(TAG, "md5:"+sb.toString()); String md5Str = CommUtils.bytesConvertToHexString(md5); Log.e(TAG, "md5:"+md5Str); } /** * SHA * @param view */ public void sha(View view) { try { byte[] bytes = SHA.encodeSHA(STR_SHA.getBytes()); byte[] bytes256 = SHA.encodeSHA256(STR_SHA.getBytes()); byte[] bytes384 = SHA.encodeSHA384(STR_SHA.getBytes()); byte[] bytes512 = SHA.encodeSHA512(STR_SHA.getBytes()); String bytesStr = CommUtils.bytesConvertToHexString(bytes); String bytes256Str = CommUtils.bytesConvertToHexString(bytes256); String bytes384Str = CommUtils.bytesConvertToHexString(bytes384); String bytes512Str = CommUtils.bytesConvertToHexString(bytes512); Log.e(TAG,"SIZE:"+bytesStr.length()+" "+bytesStr+" length:"+bytes.length); Log.e(TAG,"SIZE:"+bytes256Str.length()+" "+bytes256Str+" length:"+bytes256.length); Log.e(TAG,"SIZE:"+bytes384Str.length()+" "+bytes384Str+" length:"+bytes384.length); Log.e(TAG,"SIZE:"+bytes512Str.length()+" "+bytes512Str+" length:"+bytes512.length); /* StringBuilder sb = new StringBuilder(); for (byte b : bytes512) { sb.append(b); } Log.e(TAG,"SIZE:"+bytes512Str.length()+" "+bytes512Str+" length:"+sb.length());*/ } catch (Exception e) { e.printStackTrace(); } } /** * DES * @param view */ public void desInit(View view) { //初始化密钥 try { secretKey = DES.initKey(); } catch (Exception e) { e.printStackTrace(); } } public void desEncrypt(View view) { //加密 if (secretKey != null) { try { //第一个参数 字节数组,密钥 encrypt = DES.encrypt(STR_DES.getBytes(), secretKey); String encryptStr = CommUtils.bytesConvertToHexString(encrypt); Log.e(TAG,"encryptStr:"+encryptStr); } catch (Exception e) { e.printStackTrace(); } }else{ Toast.makeText(this, "请初始化密钥", Toast.LENGTH_SHORT).show(); } } public void desDecrypt(View view) { //解密 if (secretKey != null) { try { byte[] decrypt = DES.decrypt(encrypt, secretKey); Log.e(TAG,"decryptStr:"+new String(decrypt)); } catch (Exception e) { e.printStackTrace(); } }else{ Toast.makeText(this, "请初始化密钥", Toast.LENGTH_SHORT).show(); } } /** * RSA * @param view */ public void rsaInit(View view) { //rsa 初始化 try { keyPair = RSA.initKey(); } catch (NoSuchAlgorithmException e) { e.printStackTrace(); } } public void rsaEncrypt(View view) { if (keyPair != null) { //rsa 加密 RSAPublicKey rsaPublicKey = RSA.getRSAPublicKey(keyPair); //获取公钥// RSAPrivateKey rsaPrivateKey = RSA.getRSAPrivateKey(keyPair); try { rsaEncrypt = RSA.encrypt(STR_RSA.getBytes(), rsaPublicKey.getEncoded());// rsaEncrypt = RSA.encrypt(STR_RSA.getBytes(), rsaPrivateKey.getEncoded()); String encryptStr = CommUtils.bytesConvertToHexString(rsaEncrypt); Log.e(TAG,"encryptStr:"+encryptStr); } catch (Exception e) { e.printStackTrace(); } }else{ Toast.makeText(this, "请初始化密钥", Toast.LENGTH_SHORT).show(); } } public void rsaDecrypt(View view) { //rsa 解密 if (keyPair != null) { RSAPrivateKey rsaPrivateKey = RSA.getRSAPrivateKey(keyPair);// RSAPublicKey rsaPublicKey = RSA.getRSAPublicKey(keyPair); try { byte[] decrypt = RSA.decrypt(rsaEncrypt, rsaPrivateKey.getEncoded());// byte[] decrypt = RSA.decrypt(rsaEncrypt, rsaPublicKey.getEncoded()); Log.e(TAG,"decrypt:"+new String(decrypt)); } catch (Exception e) { e.printStackTrace(); } }else{ Toast.makeText(this, "请初始化密钥", Toast.LENGTH_SHORT).show(); } }
2.BASE64
public class BASE64 { /*** * BASE64编码 * * @param data 待编码的数据 * @return 编码后的数据 */ public static String base64encoder(String data) { byte[] b = Base64.encode(data.getBytes(), Base64.DEFAULT); return new String(b); } /** * Base64解码 * * @param data 待解码的数据 * @return 解码后的数据 */ public static String base64decode(String data) { byte[] b = Base64.decode(data.getBytes(), Base64.DEFAULT); return new String(b); }}
3.DES
public class DES { //加密方式 public final static String ALGORITHM = "DES"; //密码,长度要是8的倍数 自定义 private static String password = "12345678"; private static SecureRandom random;// private static SecretKey securekey; /** * 初始化密钥 * @throws InvalidKeyException * @throws NoSuchAlgorithmException * @throws InvalidKeySpecException */ public static SecretKey initKey() throws InvalidKeyException, NoSuchAlgorithmException, InvalidKeySpecException { random = new SecureRandom(); DESKeySpec desKey = new DESKeySpec(password.getBytes()); //创建一个密匙工厂,然后用它把DESKeySpec进行转换 SecretKeyFactory keyFactory = SecretKeyFactory.getInstance(ALGORITHM); SecretKey securekey = keyFactory.generateSecret(desKey); return securekey; } /** * DES加密 * * @param data //待加密的数据 * @return //加密后的数据 * @throws NoSuchAlgorithmException * @throws InvalidKeyException * @throws InvalidKeySpecException * @throws NoSuchPaddingException * @throws BadPaddingException * @throws IllegalBlockSizeException */ public static byte[] encrypt(byte[] data,SecretKey securekey) throws NoSuchAlgorithmException, InvalidKeyException, InvalidKeySpecException, NoSuchPaddingException, BadPaddingException, IllegalBlockSizeException { try{ //Cipher对象实际完成加密操作 Cipher cipher = Cipher.getInstance(ALGORITHM); //用密匙初始化Cipher对象 编码模式 cipher.init(Cipher.ENCRYPT_MODE, securekey, random); //现在,获取数据并加密 //正式执行加密操作 return cipher.doFinal(data); }catch(Throwable e){ e.printStackTrace(); } return null; } /** * DES数据解密 * * @param data 待解密的数据 * @throws NoSuchAlgorithmException * @throws InvalidKeyException * @throws InvalidKeySpecException * @throws NoSuchPaddingException * @throws BadPaddingException * @throws IllegalBlockSizeException */ public static byte[] decrypt(byte[] data,SecretKey securekey) throws NoSuchAlgorithmException, InvalidKeyException, InvalidKeySpecException, NoSuchPaddingException, BadPaddingException, IllegalBlockSizeException { // Cipher对象实际完成解密操作 Cipher cipher = Cipher.getInstance(ALGORITHM); // 用密匙初始化Cipher对象 解码模式 cipher.init(Cipher.DECRYPT_MODE, securekey, random); // 真正开始解密操作 return cipher.doFinal(data); }}
4.MD5
/** * 消息摘要 * MD5算法是典型的消息摘要算法,其前身有MD2,MD3和,MD4算法。 * 不论哪种MD算法,它们都需要获得以讹随 机长度的信息并产生以一个128位的信息摘要。 * 如果将这个128位的信息摘要转换为十六进制,就可以得到一 个32位的字符串, * 因此我们见到的大部分MD5算法的指纹都是32位十六进制的字符串。 * * 特点:消息摘要的主要特点是对同一段数据做多次摘要处理后,其摘要值完全一致。 */public class MD5 { /** * 获得数据的MD5编码 * * @param data 待处理的数据 * @return 加密后的MD5值 */ public static byte[] getMD5(byte[] data) { try { MessageDigest md = MessageDigest.getInstance("MD5"); md.update(data); return md.digest(); } catch (NoSuchAlgorithmException e) { e.printStackTrace(); } return null; }}
5.RSA
public class RSA { /** * 算法名称 */ public static final String KEY_ALGORITHM = "RSA"; //算法 /** * RSA密钥长度 * 默认为1024位 * 密钥长度必须为64的倍数 * 范围在512~65536之间 */ private static final int KEY_SIZE = 1024; /** * 生成密钥对 * * @return 密钥对对象 * @throws NoSuchAlgorithmException */ public static KeyPair initKey() throws NoSuchAlgorithmException { //实例化密钥对生成器 KeyPairGenerator generator = KeyPairGenerator.getInstance(KEY_ALGORITHM); //初始化密钥对生成器 generator.initialize(KEY_SIZE); //生成密钥对 return generator.generateKeyPair(); } /** * 获得密钥对中公钥 * @param pair 密钥对 * * @return */ public static RSAPublicKey getRSAPublicKey(KeyPair pair){ RSAPublicKey key = (RSAPublicKey)pair.getPublic(); //获得公钥编码 byte[] encoded = key.getEncoded(); return key; } /** * 获得密钥对中私钥 * @param pair 密钥对 * * @return */ public static RSAPrivateKey getRSAPrivateKey(KeyPair pair){ RSAPrivateKey key = (RSAPrivateKey)pair.getPrivate(); //获得私钥编码 byte[] encoded = key.getEncoded(); return key; } /** * RSA加密 * @param data 待解密的数据 * @param key 公钥 * @return 解密后的数据 * @throws NoSuchAlgorithmException * @throws InvalidKeySpecException * @throws NoSuchPaddingException * @throws InvalidKeyException * @throws BadPaddingException * @throws IllegalBlockSizeException */ public static byte[] encrypt(byte[] data, byte[] key) throws NoSuchAlgorithmException, InvalidKeySpecException, NoSuchPaddingException, InvalidKeyException, BadPaddingException, IllegalBlockSizeException { //取得私钥 X509EncodedKeySpec spec = new X509EncodedKeySpec(key); KeyFactory factory = KeyFactory.getInstance(KEY_ALGORITHM); //生成私钥 PublicKey publicKey = factory.generatePublic(spec); //对数据加密 Cipher cipher = Cipher.getInstance(factory.getAlgorithm()); cipher.init(Cipher.ENCRYPT_MODE, publicKey); return cipher.doFinal(data); } /** * RSA解密 * * @param data 待解密的数据 * @param key 私钥 * @return 解密后的数据 * @throws NoSuchAlgorithmException * @throws InvalidKeySpecException * @throws NoSuchPaddingException * @throws InvalidKeyException * @throws BadPaddingException * @throws IllegalBlockSizeException */ public static byte[] decrypt(byte[] data, byte[] key) throws NoSuchAlgorithmException, InvalidKeySpecException, NoSuchPaddingException, InvalidKeyException, BadPaddingException, IllegalBlockSizeException { //取得私钥 PKCS8EncodedKeySpec spec = new PKCS8EncodedKeySpec(key); KeyFactory factory = KeyFactory.getInstance(KEY_ALGORITHM); //生成私钥 PrivateKey privateKey = factory.generatePrivate(spec); //对数据解密 Cipher cipher = Cipher.getInstance(factory.getAlgorithm()); cipher.init(Cipher.DECRYPT_MODE, privateKey); return cipher.doFinal(data); }}
6.SHA
/** * 消息摘要 * SHA算法基于MD4算法基础之上,作为MD算法的继任者。 * SHA与MD算法不同之处在于摘要长度,SHA算法的 摘要长度更长,安全性更高。 */public class SHA { /** * SHA-1消息摘要 * * @param data 待处理的数据 * @return 消息摘要 * @throws NoSuchAlgorithmException */ public static byte[] encodeSHA(byte[] data) throws NoSuchAlgorithmException { MessageDigest md = MessageDigest.getInstance("SHA"); return md.digest(data); } /** * SHA-256消息摘要 * * @param data 待处理的数据 * @return 消息摘要 * @throws NoSuchAlgorithmException */ public static byte[] encodeSHA256(byte[] data) throws NoSuchAlgorithmException { MessageDigest md = MessageDigest.getInstance("SHA-256"); return md.digest(data); } /** * SHA-384消息摘要 * * @param data 待处理的数据 * @return 消息摘要 * @throws NoSuchAlgorithmException */ public static byte[] encodeSHA384(byte[] data) throws NoSuchAlgorithmException { MessageDigest md = MessageDigest.getInstance("SHA-384"); return md.digest(data); } /** * SHA-512消息摘要 * * @param data 待处理的数据 * @return 消息摘要 * @throws NoSuchAlgorithmException */ public static byte[] encodeSHA512(byte[] data) throws NoSuchAlgorithmException { MessageDigest md = MessageDigest.getInstance("SHA-512"); return md.digest(data); }}
7.工具类
public class CommUtils { /** * byte数组 转 16进制 * @param bytes * @return */ public static String bytesConvertToHexString(byte[] bytes) { StringBuffer sb = new StringBuffer(); for (byte aByte : bytes) { String s = Integer.toHexString(0xff & aByte); if (s.length() == 1) { sb.append("0" + s); } else { sb.append(s); } } return sb.toString(); }}