android md5 encryption and rsa encryption and decryption code

  • 2020-05-07 20:25:17
  • OfStack

 
import java.io.UnsupportedEncodingException; 
import java.security.MessageDigest; 
import java.security.NoSuchAlgorithmException; 
public class MD5 { 
/* 
* MD5 encryption  
*/ 
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 { 
/** 
*  encryption  
* 
* @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); 
} 
/** 
*  decryption  
* 
* @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); 
} 
/** 
*  encryption ( Public key encryption, private key encryption ) 
* 
* @param message  Message to be encrypted  
* @param key  Public or private keys  
* @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); 
//  Pay attention to the handling of Chinese  
return cipher.doFinal(message.getBytes("gb2312")); 
} 
/** 
*  decryption ( If the public key is encrypted, it is decrypted with the private key. If the private key is encrypted, it is decrypted with the public key ) 
* 
* @param message  Message to be decrypted  
* @param key  Public or private keys  
* @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)); 
} 
/** 
*  The public key is obtained by module length and public key index  
* 
* @param modulus  length  
* @param publicExponent  Public key index  
* @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 = " Don't know when, began to like here, every night will come here to see you. "; 
Log.d("zhangxy",MD5.getDigest(info)); 
//  Public key encryption  
Log.d("zhangxy",RSAUtil.encrypt(info)); 
//  Public key decryption (encrypted by private key)  
Log.d("zhangxy", RSAUtil.decrypt("94d5ffca913465785714348f10c57c8a0226aca2c8a5294d3a32f398c4791bee8bb37873e16a7b71ed64e40ac121ec4f4bf375b881421a17a3f10789dc543ab41c26c11ba1184b2e0328ef6d354e191f7d978bd9b984e76d310e028b3412093f7296d58d9adb7f9e4b5eb6427c369ae5e919f848c7a21b7794d5985e4d3ad10a")); 
} 
} 

Related articles: