标签:
共四种:
1.base64(大小写英文字母、10个基本阿拉伯数字、+、/)
2.MD5(任意长度的数据,算出的MD5值长度都是固定的,哪怕只修改1个字节,所得到的MD5值都有很大区别)
3.对称密钥加密(加密解密的密钥一样)
4.非对称加密(加密解密的密钥不一样,分为公钥和私钥)
public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); NavigationView navigationView = (NavigationView) findViewById(R.id.navigation_view); final DrawerLayout drawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout); navigationView.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() { @Override public boolean onNavigationItemSelected(MenuItem item) { FragmentTransaction transaction = getSupportFragmentManager().beginTransaction(); switch (item.getItemId()) { case R.id.base64: // fragment = new Base64Fragment(); transaction.replace(R.id.content, new Base64Fragment()); break; case R.id.md5: transaction.replace(R.id.content, new MD5Fragment()); break; case R.id.des: transaction.replace(R.id.content, new DESFragment()); break; case R.id.rsa: transaction.replace(R.id.content, new RSAFragment()); break; } // transaction.replace(R.id.content, fragment).commit(); transaction.commit(); drawerLayout.closeDrawer(Gravity.LEFT); return true; } }); } }
Base64加密解密
public class Base64Fragment extends Fragment { @Bind(R.id.encode_et) EditText encodeEt; @Bind(R.id.decode_et) EditText decodeEt; @Bind(R.id.result) TextView result; @Nullable @Override public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { View view = inflater.inflate(R.layout.base64_layout,null); ButterKnife.bind(this, view); return view; } @OnClick(R.id.encode) public void encode() { String srcStr = encodeEt.getText().toString(); //编码 String s = Base64.encodeToString(srcStr.getBytes(), Base64.DEFAULT); decodeEt.setText(s); } @OnClick(R.id.decode) public void decode() { String srcStr = decodeEt.getText().toString(); byte[] decode = Base64.decode(srcStr.getBytes(), Base64.DEFAULT); String s = new String(decode, 0, decode.length); result.setText(s); } }
MD5加密解密
public class MD5Fragment extends Fragment { @Bind(R.id.encode_et) EditText encodeEt; @Bind(R.id.result) TextView result; @Nullable @Override public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { View view = inflater.inflate(R.layout.md5_layout, null); ButterKnife.bind(this, view); return view; } @OnClick(R.id.encode) public void encode() { try { //获取一个消息摘要生成实例 MessageDigest messageDigest = MessageDigest.getInstance("MD5"); byte[] digest = messageDigest.digest(encodeEt.getText().toString().getBytes()); StringBuffer stringBuffer = new StringBuffer(); for (byte b : digest) { //使用十六进制输出消息摘要,不足两位的用0补齐 stringBuffer.append(String.format("%02x", b)); } result.setText(stringBuffer.toString()); } catch (NoSuchAlgorithmException e) { e.printStackTrace(); } } }
对称密钥加密
public class DESFragment extends Fragment { @Bind(R.id.encode_et) EditText encodeEt; @Bind(R.id.decode_et) EditText decodeEt; @Bind(R.id.encode_et2) EditText encodeEt2; @Bind(R.id.decode_et2) EditText decodeEt2; @Bind(R.id.encode_et3) EditText encodeEt3; @Bind(R.id.decode_et3) EditText decodeEt3; @Bind(R.id.result) TextView result; @Nullable @Override public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { View view = inflater.inflate(R.layout.des_layout, null); ButterKnife.bind(this, view); return view; } @OnClick(R.id.encode) public void encode() { String des = EncryptionHelper.des(encodeEt.getText().toString(), "789", EncryptionHelper.ENCODE); decodeEt.setText(des); } @OnClick(R.id.decode) public void decode() { String des = EncryptionHelper.des(decodeEt.getText().toString(), "789", EncryptionHelper.DECODE); result.setText(des); } @OnClick(R.id.encode2) public void encode2() { String s = EncryptionHelper.des3(encodeEt2.getText().toString(), "123", EncryptionHelper.ENCODE); decodeEt2.setText(s); } @OnClick(R.id.decode2) public void decode2() { String s = EncryptionHelper.des3(decodeEt2.getText().toString(), "123", EncryptionHelper.DECODE); result.setText(s); } @OnClick(R.id.encode3) public void encode3() { String s = EncryptionHelper.aes(encodeEt3.getText().toString(), "abcd", EncryptionHelper.ENCODE); decodeEt3.setText(s); } @OnClick(R.id.decode3) public void decode3() { String abcd = EncryptionHelper.aes(decodeEt3.getText().toString(), "abcd", EncryptionHelper.DECODE); result.setText(abcd); } }
public class EncryptionHelper { public static final int ENCODE = 0; public static final int DECODE = 1; /** * 使用DES算法进行对称加/解密 * * @param srcStr 明文 * @param key 密钥 * @param mode 模式(加密/解密) * @return */ public static String des(String srcStr, String key, int mode) { String charsetName = "UTF-8"; try { //获得key的byte数组 byte[] keyBytes = key.getBytes(charsetName); //des算法中key的长度为8 byte[] temp = new byte[8]; //数组拷贝 //1.源数组 //2.开始复制的位置 //3.目标数组 //4.目标数组的位置 //5.复制的长度 System.arraycopy(keyBytes, 0, temp, 0, Math.min(keyBytes.length, temp.length)); //生成密钥 //1.密钥数组 //2.生成密钥的算法名称 SecretKey secretKey = new SecretKeySpec(temp, "des"); //获取一个密文生成器 Cipher cipher = Cipher.getInstance("des"); //如果要进行加密 if (mode == ENCODE) { //初始化密文生成器 cipher.init(Cipher.ENCRYPT_MODE, secretKey); //执行加密 byte[] bytes = cipher.doFinal(srcStr.getBytes(charsetName)); //使用Base64对加密结果进行编码 String s = Base64.encodeToString(bytes, Base64.DEFAULT); return s; //如果要解密 } else { //初始化密文生成器 cipher.init(Cipher.DECRYPT_MODE, secretKey); //由于传进来的srcStr是对密文进行加密后的字符串,所以在解密之前先要解码 byte[] bytes = cipher.doFinal(Base64.decode(srcStr, Base64.DEFAULT)); //返回明文 return new String(bytes, 0, bytes.length); } } catch (UnsupportedEncodingException e) { e.printStackTrace(); } catch (NoSuchAlgorithmException e) { e.printStackTrace(); } catch (NoSuchPaddingException e) { e.printStackTrace(); } catch (InvalidKeyException e) { e.printStackTrace(); } catch (BadPaddingException e) { e.printStackTrace(); } catch (IllegalBlockSizeException e) { e.printStackTrace(); } return null; } public static String des3(String srcStr, String key, int mode) { String charsetName = "UTF-8"; try { byte[] keyBytes = key.getBytes(charsetName); //注意和des算法key的长度不同 byte[] temp = new byte[24]; System.arraycopy(keyBytes, 0, temp, 0, Math.min(keyBytes.length, temp.length)); SecretKey secretKey = new SecretKeySpec(temp, "desede"); Cipher cipher = Cipher.getInstance("desede"); if (mode == ENCODE) { cipher.init(Cipher.ENCRYPT_MODE, secretKey); byte[] bytes = cipher.doFinal(srcStr.getBytes(charsetName)); return Base64.encodeToString(bytes, Base64.DEFAULT); } else { cipher.init(Cipher.DECRYPT_MODE, secretKey); byte[] bytes = cipher.doFinal(Base64.decode(srcStr, Base64.DEFAULT)); return new String(bytes, 0, bytes.length); } } catch (UnsupportedEncodingException e) { e.printStackTrace(); } catch (NoSuchAlgorithmException e) { e.printStackTrace(); } catch (NoSuchPaddingException e) { e.printStackTrace(); } catch (InvalidKeyException e) { e.printStackTrace(); } catch (BadPaddingException e) { e.printStackTrace(); } catch (IllegalBlockSizeException e) { e.printStackTrace(); } return null; } public static String aes(String srcStr, String key, int mode) { String charsetName = "UTF-8"; try { byte[] keyBytes = key.getBytes(charsetName); byte[] temp = new byte[32]; System.arraycopy(keyBytes, 0, temp, 0, Math.min(keyBytes.length, temp.length)); SecretKey secretKey = new SecretKeySpec(temp, "aes"); Cipher cipher = Cipher.getInstance("aes"); if (mode == ENCODE) { cipher.init(Cipher.ENCRYPT_MODE, secretKey); byte[] bytes = cipher.doFinal(srcStr.getBytes(charsetName)); return Base64.encodeToString(bytes, Base64.DEFAULT); } else { cipher.init(Cipher.DECRYPT_MODE, secretKey); byte[] bytes = cipher.doFinal(Base64.decode(srcStr, Base64.DEFAULT)); return new String(bytes, 0, bytes.length); } } catch (UnsupportedEncodingException e) { e.printStackTrace(); } catch (NoSuchAlgorithmException e) { e.printStackTrace(); } catch (NoSuchPaddingException e) { e.printStackTrace(); } catch (InvalidKeyException e) { e.printStackTrace(); } catch (BadPaddingException e) { e.printStackTrace(); } catch (IllegalBlockSizeException e) { e.printStackTrace(); } return null; } }
非对称密钥加密
public class RSAFragment extends Fragment { //两个大素数的乘积 private static final String MODULUS = "100631058000714094813874361191853577129731636346684218206605779824931626830750623070803100189781211343851763275329364056640619755337779928985272486091431384128027213365372009648233171894708338213168824861061809490615593530405056055952622249066180336803996949444124622212096805545953751253607916170340397933039"; //公钥 private static final String PUB_KEY = "65537"; //私钥 private static final String PRI_KEY = "26900155715313643087786516528374548998821559381075740707715132776187148793016466508650068087107695523642202737697714709374658856733792614490943874205956727606674634563665154616758939576547663715234643273055658829482813503959459653708062875625210008961239643775661357655599312857249418610810177817213648575161"; @Bind(R.id.encode_et) EditText encodeEt; @Bind(R.id.decode_et) EditText decodeEt; @Bind(R.id.result) TextView result; @Nullable @Override public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { View view = inflater.inflate(R.layout.rsa_layout, null); ButterKnife.bind(this, view); return view; } @OnClick(R.id.encode) public void encode() { String srcStr = encodeEt.getText().toString(); try { //获取一个公钥/私钥生成工厂 KeyFactory keyFactory = KeyFactory.getInstance("rsa"); //1.大素数的乘积 //2.公钥 RSAPublicKeySpec rsaPublicKey = new RSAPublicKeySpec(new BigInteger(MODULUS), new BigInteger(PUB_KEY)); //生成公钥 PublicKey publicKey = keyFactory.generatePublic(rsaPublicKey); //获取一个密码生成器 Cipher cipher = Cipher.getInstance("rsa"); //初始化密码生成器 cipher.init(Cipher.ENCRYPT_MODE, publicKey); //加密 byte[] bytes = cipher.doFinal(srcStr.getBytes("UTF-8")); String s = Base64.encodeToString(bytes, Base64.DEFAULT); decodeEt.setText(s); } catch (NoSuchAlgorithmException e) { e.printStackTrace(); } catch (InvalidKeySpecException e) { e.printStackTrace(); } catch (NoSuchPaddingException e) { e.printStackTrace(); } catch (InvalidKeyException e) { e.printStackTrace(); } catch (BadPaddingException e) { e.printStackTrace(); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } catch (IllegalBlockSizeException e) { e.printStackTrace(); } } @OnClick(R.id.decode) public void decode() { try { KeyFactory keyFactory = KeyFactory.getInstance("rsa"); RSAPrivateKeySpec rsaPrivateKeySpec = new RSAPrivateKeySpec(new BigInteger(MODULUS), new BigInteger(PRI_KEY)); PrivateKey privateKey = keyFactory.generatePrivate(rsaPrivateKeySpec); Cipher cipher = Cipher.getInstance("rsa"); cipher.init(Cipher.DECRYPT_MODE, privateKey); byte[] bytes = cipher.doFinal(Base64.decode(decodeEt.getText().toString(), Base64.DEFAULT)); String s = new String(bytes, 0, bytes.length); result.setText(s); } catch (NoSuchAlgorithmException e) { e.printStackTrace(); } catch (InvalidKeySpecException e) { e.printStackTrace(); } catch (NoSuchPaddingException e) { e.printStackTrace(); } catch (InvalidKeyException e) { e.printStackTrace(); } catch (BadPaddingException e) { e.printStackTrace(); } catch (IllegalBlockSizeException e) { e.printStackTrace(); } } }
标签:
原文地址:http://www.cnblogs.com/anni-qianqian/p/5484624.html