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"));

}

}

时间: 2024-09-15 20:32:14

android md5加密与rsa加解密实现代码的相关文章

android md5加密与rsa加解密实现代码_Android

复制代码 代码如下: import java.io.UnsupportedEncodingException; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; public class MD5 { /* * MD5加密 */ public static String getDigest(String str) { MessageDigest messageDigest = nul

asp.net实现的MD5加密和DES加解密算法类完整示例_实用技巧

本文实例讲述了asp.net实现的MD5加密和DES加解密算法类.分享给大家供大家参考,具体如下: #region MD5算法 public string md5(string str, int code) { if (code == 32) //32位加密 { return System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(str, "MD5").ToLower(); } else /

后台-RSA加解密问题求教,已知公钥的模和指数

问题描述 RSA加解密问题求教,已知公钥的模和指数 遇到个问题,请教下大家后台下发下来公钥的模和指数,前端怎样通过公钥的模和指数合成一个公钥来加密一组32位的随机数 解决方案 http://blog.csdn.net/fenghaibo00/article/details/17249493

C# 中使用 RSA加解密算法

一.什么是RSA RSA公开密钥密码体制.所谓的公开密钥密码体制就是使用不同的加密密钥与解密密钥,是一种"由已知加密密钥推导出解密密钥在计算上是不可行的"密码体制. 在公开密钥密码体制中,加密密钥(即公开密钥)PK是公开信息,而解密密钥(即秘密密钥)SK是需要保密的.加密算法E和解密算法D也都是公开的.虽然密钥SK是由公开密钥PK决定的,但却不能根据PK计算出SK.正是基于这种理论,1978年出现了著名的RSA算法,它通常是先生成一对RSA 密钥,其中之一是保密密钥,由用户保存:另一个

解密-java的MD5加密怎么改成C++的代码

问题描述 java的MD5加密怎么改成C++的代码 import java.security.MessageDigest; public class MD5andKL { // MD5加码.32位 public static String MD5(String inStr) { MessageDigest md5 = null; try { md5 = MessageDigest.getInstance("MD5"); } catch (Exception e) { System.ou

java 指数 背包 RSA 加解密

问题描述 高手帮帮忙,现在要做一个指数加解密.背包加解密.RSA加解密的小应用程序用java来实现就是在一个窗口的文本域里输入一串数字,在同一个窗口输出加解密后的结果,急,高手帮帮忙!

Android md5加密与php md5加密一致详解

Android md5加密与php md5加密一致详解 在Android开发过程中加密密码常常采用md5加密方式,然而如果服务器端采用PHP开发(php采用md5加密很简单,直接md5($str)),很可能与Java的md5加密不一致.以下方法是md5加密与php一致的源码: import java.math.BigInteger; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException;

100分求C#和C++都能够加解密的代码

问题描述 我有一个DLL是用VC写的DES加密,但是用VC的DES加密后的密文用C#解密不了,因此很郁闷,只能把C++的DLL放到服务器上让C#来调,这样勉强解决,但后来又用的是免费空间了,人家不让用VC的DLL了,顺便说一下用的是常来网的免费空间http://web.99081.com/sysweb/RegTrans.aspx?CodeProvider=ymfhcn支持ASP.NET2.0,我本地调用VC的DLL是正常的,但在免费空间里就不行,因此求一个解决方案,让C++和c#都能够正常加解密

android MD5加密

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 public class Demo {       /**      * @param args      * @throws NoSuchAlgorithmException      */     public static void main(String[] args) throws NoSuchAlgorithmException {         Me