zoukankan      html  css  js  c++  java
  • android md5加密与rsa加解密实现代码

    import java.io.UnsupportedEncodingException;
    import java.security.MessageDigest;
    import java.security.NoSuchAlgorithmException;


    public class MD5 {
    /* 
    * MD5加密 
    */ 
    public static String getDigest(String str) {
    MessageDigest messageDigest = null;

    try {
    messageDigest = MessageDigest.getInstance("MD5");
    messageDigest.reset();
    messageDigest.update(str.getBytes("UTF-8"));
    } catch (NoSuchAlgorithmException e) {
    e.printStackTrace();
    } catch (UnsupportedEncodingException e) {
    e.printStackTrace();
    }

    byte[] byteArray = messageDigest.digest();
    StringBuffer md5StrBuff = new StringBuffer();

    for (int i = 0; i < byteArray.length; i++) {
    if (Integer.toHexString(0xFF & byteArray[i]).length() == 1) {
    md5StrBuff.append("0")
    .append(Integer.toHexString(0xFF & byteArray[i]));
    } else {
    md5StrBuff.append(Integer.toHexString(0xFF & byteArray[i]));
    }
    }

    return md5StrBuff.toString().toUpperCase();
    }
    }

    import java.math.BigInteger;
    import java.security.Key;
    import java.security.KeyFactory;
    import java.security.PublicKey;
    import java.security.spec.RSAPublicKeySpec;
    import javax.crypto.Cipher;
    import org.bouncycastle.jce.provider.BouncyCastleProvider;
    public class RSAUtil {
    /**
    * 加密
    *
    * @param message
    * @return
    */
    public static String encrypt(String message) {
    byte[] result = null;
    try {
    result = encrypt(message, getPublicKey());
    } catch (Exception e) {
    e.printStackTrace();
    }
    return toHexString(result);
    }
    /**
    * 解密
    *
    * @param message
    * @return
    */
    public static String decrypt(String message) {
    byte[] result = null;
    try {
    result = decrypt(message, getPublicKey());
    } catch (Exception e) {
    e.printStackTrace();
    }
    return new String(result);
    }
    /**
    * 加密(公钥加密、私钥加密)
    *
    * @param message 待加密的消息
    * @param key 公钥或私钥
    * @return
    * @throws Exception
    */
    private static byte[] encrypt(String message, Key key) throws Exception {
    Cipher cipher = Cipher.getInstance("RSA", new BouncyCastleProvider());
    cipher.init(Cipher.ENCRYPT_MODE, key);
    // 注意中文的处理
    return cipher.doFinal(message.getBytes("gb2312"));
    }
    /**
    * 解密(如果公钥加密,则用私钥解密;如果私钥加密,则用公钥解密)
    *
    * @param message 待解密的消息
    * @param key 公钥或私钥
    * @return
    * @throws Exception
    */
    private static byte[] decrypt(String message, Key key) throws Exception {
    Cipher cipher = Cipher.getInstance("RSA", new BouncyCastleProvider());
    cipher.init(Cipher.DECRYPT_MODE, key);
    return cipher.doFinal(toBytes(message));
    }
    /**
    * 通过模长和公钥指数获取公钥
    *
    * @param modulus 模长
    * @param publicExponent 公钥指数
    * @return
    * @throws Exception
    */
    public static PublicKey getPublicKey() {
    PublicKey publicKey = null;
    String modulus = "140865665237544398577638791993321201143991791099370252934699963963887058026979531275917645451893685346013654333931757603593193739776986525943697469996693704995753266331593233395038088698299308180612215713544577462613426793519824197226393059683065343801412208205295045502348474411031999124137863144916358656019";
    String publicExponent = "65537";
    BigInteger m = new BigInteger(modulus);
    BigInteger e = new BigInteger(publicExponent);
    RSAPublicKeySpec keySpec = new RSAPublicKeySpec(m, e);
    try {
    KeyFactory keyFactory = KeyFactory.getInstance("RSA", new BouncyCastleProvider());
    publicKey = keyFactory.generatePublic(keySpec);
    } catch (Exception e1) {
    e1.printStackTrace();
    }
    return publicKey;
    }
    private static final byte[] toBytes(String s) {
    byte[] bytes;
    bytes = new byte[s.length() / 2];
    for (int i = 0; i < bytes.length; i++) {
    bytes[i] = (byte) Integer.parseInt(s.substring(2 * i, 2 * i + 2), 16);
    }
    return bytes;
    }
    public static String toHexString(byte[] b) {
    StringBuilder sb = new StringBuilder(b.length * 2);
    for (int i = 0; i < b.length; i++) {
    sb.append(HEXCHAR[(b[i] & 0xf0) >>> 4]);
    sb.append(HEXCHAR[b[i] & 0x0f]);
    }
    return sb.toString();
    }
    private static char[] HEXCHAR = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f' };

    import android.app.Activity;
    import android.os.Bundle;
    import android.util.Log;
    public class MainActivity extends Activity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    String info = "不知道什么时候,开始喜欢这里,每个夜里都会来这里看你。";
    Log.d("zhangxy",MD5.getDigest(info));
    // 公钥加密
    Log.d("zhangxy",RSAUtil.encrypt(info));
    // 公钥解密(经私钥加密)
    Log.d("zhangxy", RSAUtil.decrypt("94d5ffca913465785714348f10c57c8a0226aca2c8a5294d3a32f398c4791bee8bb37873e16a7b71ed64e40ac121ec4f4bf375b881421a17a3f10789dc543ab41c26c11ba1184b2e0328ef6d354e191f7d978bd9b984e76d310e028b3412093f7296d58d9adb7f9e4b5eb6427c369ae5e919f848c7a21b7794d5985e4d3ad10a"));
    }

  • 相关阅读:
    模糊查询于聚合函数
    用SQL语句操作数据
    数据库增删改查
    错题本4
    数据查询基础
    用表组织数据
    初识数据库
    错题本3
    深入C#的String类
    定位
  • 原文地址:https://www.cnblogs.com/lucktian/p/5865988.html
Copyright © 2011-2022 走看看