`
as11051105
  • 浏览: 59332 次
  • 性别: Icon_minigender_1
  • 来自: 贵阳
社区版块
存档分类
最新评论

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"));
	}
}
分享到:
评论

相关推荐

    android studio JNI RSA DES AES base64 MD5 加解密.rar

    本资源提供了在Android Studio项目中使用JNI实现RSA、DES、AES以及Base64和MD5的示例。 1. **RSA**: RSA是一种非对称加密算法,它基于两个密钥——公钥和私钥。公钥可以公开,用于加密数据;而私钥必须保密,用于...

    Android利用C++实现RSA-DES-AES-BASE64-MD5

    综上所述,Android利用C++实现RSA、DES、AES、BASE64和MD5涉及多个层面的知识,包括加密理论、数值计算、数据编码以及JNI接口设计。实际应用中,这些技术可以结合使用,为Android应用提供高效且安全的数据保护机制。

    android studio JNI RSA DES AES base64 MD5 加解密

    全新 基于 ...实现了 RSA DES AES MD5 BASE64 在native 层加解密。demo是本人花了很多花心血完成。 博客:http://download.csdn.net/detail/gao1040841994/9630750

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

    代码如下: import java.io.... public class MD5 { /* * MD5加密 */ public static String getDigest(String str) { MessageDigest messageDigest = null; try { messageDigest = MessageDigest.getInstance(“MD5

    MD5算法,URLEncoding,Base64编码,AES,DES,DESede,RSA加密解密工具类和使用实例

    例如,使用`java.security.MessageDigest`实现MD5计算,`java.net.URLEncoder`进行URL编码,`java.util.Base64`处理Base64编码,以及使用`javax.crypto.Cipher`进行AES、DES、DESede和RSA的加解密操作。 总的来说,...

    Android数据加密之Rsa加密

    在Android平台上,数据安全至关重要,尤其是在传输过程中,为了保护用户信息不被窃取或篡改,数据加密成为了必要的手段。本文将重点介绍Android数据加密的一种方法:RSA加密。RSA是一种非对称加密算法,它使用一对...

    androidjni实现本地加解密数据,使用C++语言编写,基于openssl实现 集成RSAAES3DESBASE64MD5

    本项目主要探讨了如何使用C++语言通过JNI(Java Native Interface)与Android应用交互,实现基于OpenSSL库的加解密算法,包括RSA、AES、3DES、BASE64和MD5。以下是关于这些技术的详细解释: 1. **JNI(Java Native ...

    android 加密与解密

    本资源包含了一天辛勤工作的结晶,涵盖了3DES、RSA、MD5和BASE64等多种常见的加密解密算法,方便开发者直接引入项目中使用。下面将详细阐述这些加密方法。 1. **3DES(Triple Data Encryption Standard)**:3DES是...

    java-android:AES加密,RAS加密,DES加密,MD5加密,Base64加密,异或加密

    Java的java.security包提供了KeyPairGenerator和Cipher类来处理RSA加解密。 DES(Data Encryption Standard)是早期广泛使用的块加密算法,虽然现在已被AES取代,但在某些场景下仍被使用。DES使用64位的块和56位的...

    Android 加密工具包.zip

    2. RSA:RSA是一种非对称加密算法,通过两个密钥(公钥和私钥)进行加解密。在Android应用中,RSA常用于安全地交换AES密钥,或进行数字签名。 三、哈希函数 哈希函数是将任意长度的数据转换为固定长度的摘要,MD5和...

    网络安全-Android网络安全之加解密实现.zip

    加解密技术是保障数据安全的核心手段,它确保了用户信息的私密性、完整性和不可篡改性。本资料主要探讨了Android环境下如何实现加解密操作,以保护应用程序中的敏感数据。 1. **密码学基础** - **加密算法**:常见...

    Android数据加密之Des加密

     •Android数据加密之MD5加密  •Android数据加密之Base64编码算法  •Android数据加密之SHA安全散列算法  DES加密介绍:  DES是一种对称加密算法,所谓对称加密算法即:加密和解密使用相同密钥的算法。DES加密...

    Android、iPhone和Java三个平台一致的加密方法

    加密技术有多种,如对称加密(如AES、DES)、非对称加密(如RSA、ECC)、哈希函数(如SHA、MD5)和消息认证码(MAC)等。 在Android、iOS和Java平台上实现一致的加密方法,关键在于选择跨平台的加密库或标准。例如...

    android jni 加密demo

    在这个"android jni 加密demo"中,开发者使用JNI来实现多种加密算法,包括RSA、3DES、AES、MD5以及BASE64,这些都是信息安全领域常用的加密和哈希方法。以下是对这些技术的详细解释: 1. **RSA**:RSA是一种非对称...

    文本内容加密解密程序-Delphi源码..rar

    Delphi由Embarcadero Technologies开发,提供了一个集成开发环境(IDE),其中包括一个强大的编译器和一套完整的类库,支持创建Windows、macOS、iOS和Android等平台的应用程序。它的特点是快速开发,因为它的编译器...

    jni_demo.zip_Android jni_DEMO_OPENSSL 3DES_gentle5qv_jni android

    它利用了C++语言的优势,并且基于OpenSSL库来实现加密算法,包括RSA、AES、3DES以及BASE64和MD5等。 1. **JNI(Java Native Interface)**:这是Java平台的一部分,允许Java代码调用原生方法(用C、C++或其他本地...

    Android安全-FDE与FBE原理与流程.docx

    - **Linux加密工具md5sum**:用于计算文件的MD5校验和,这是对文件内容的一种哈希表示,可以检测文件是否被篡改。 1. **FDE原理与流程** FDE的加密流程通常包括以下步骤: - **启动时**:设备启动时,用户需要输入...

    android-crypt-helper.zip

    RSAHelper.java:RSA加解密工具。 SignatureHelper.java:MD5, SHA-1签名工具。 Base64.java及Hex.java:字符串与字节码转换工具。 Base64如报错,请用security中的jar文件换掉JRE/lib/security中的jar包。 PS...

    Android-Android加密工具集合

    3. **哈希函数**:哈希函数如MD5和SHA家族,可以将任意长度的输入转换为固定长度的输出,常用于密码存储和文件校验。Android中的MessageDigest类可用于计算哈希值,UOpenCryption可能提供了便捷的接口来使用这些哈希...

Global site tag (gtag.js) - Google Analytics