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的示例。 1. **RSA**: RSA是一种非对称加密算法,它基于两个密钥——公钥和私钥。公钥可以公开,用于加密数据;而私钥必须保密,用于...
综上所述,Android利用C++实现RSA、DES、AES、BASE64和MD5涉及多个层面的知识,包括加密理论、数值计算、数据编码以及JNI接口设计。实际应用中,这些技术可以结合使用,为Android应用提供高效且安全的数据保护机制。
全新 基于 ...实现了 RSA DES AES MD5 BASE64 在native 层加解密。demo是本人花了很多花心血完成。 博客:http://download.csdn.net/detail/gao1040841994/9630750
代码如下: import java.io.... public class MD5 { /* * MD5加密 */ public static String getDigest(String str) { MessageDigest messageDigest = null; try { messageDigest = MessageDigest.getInstance(“MD5
例如,使用`java.security.MessageDigest`实现MD5计算,`java.net.URLEncoder`进行URL编码,`java.util.Base64`处理Base64编码,以及使用`javax.crypto.Cipher`进行AES、DES、DESede和RSA的加解密操作。 总的来说,...
在Android平台上,数据安全至关重要,尤其是在传输过程中,为了保护用户信息不被窃取或篡改,数据加密成为了必要的手段。本文将重点介绍Android数据加密的一种方法:RSA加密。RSA是一种非对称加密算法,它使用一对...
本项目主要探讨了如何使用C++语言通过JNI(Java Native Interface)与Android应用交互,实现基于OpenSSL库的加解密算法,包括RSA、AES、3DES、BASE64和MD5。以下是关于这些技术的详细解释: 1. **JNI(Java Native ...
本资源包含了一天辛勤工作的结晶,涵盖了3DES、RSA、MD5和BASE64等多种常见的加密解密算法,方便开发者直接引入项目中使用。下面将详细阐述这些加密方法。 1. **3DES(Triple Data Encryption Standard)**:3DES是...
Java的java.security包提供了KeyPairGenerator和Cipher类来处理RSA加解密。 DES(Data Encryption Standard)是早期广泛使用的块加密算法,虽然现在已被AES取代,但在某些场景下仍被使用。DES使用64位的块和56位的...
2. RSA:RSA是一种非对称加密算法,通过两个密钥(公钥和私钥)进行加解密。在Android应用中,RSA常用于安全地交换AES密钥,或进行数字签名。 三、哈希函数 哈希函数是将任意长度的数据转换为固定长度的摘要,MD5和...
加解密技术是保障数据安全的核心手段,它确保了用户信息的私密性、完整性和不可篡改性。本资料主要探讨了Android环境下如何实现加解密操作,以保护应用程序中的敏感数据。 1. **密码学基础** - **加密算法**:常见...
•Android数据加密之MD5加密 •Android数据加密之Base64编码算法 •Android数据加密之SHA安全散列算法 DES加密介绍: DES是一种对称加密算法,所谓对称加密算法即:加密和解密使用相同密钥的算法。DES加密...
加密技术有多种,如对称加密(如AES、DES)、非对称加密(如RSA、ECC)、哈希函数(如SHA、MD5)和消息认证码(MAC)等。 在Android、iOS和Java平台上实现一致的加密方法,关键在于选择跨平台的加密库或标准。例如...
在这个"android jni 加密demo"中,开发者使用JNI来实现多种加密算法,包括RSA、3DES、AES、MD5以及BASE64,这些都是信息安全领域常用的加密和哈希方法。以下是对这些技术的详细解释: 1. **RSA**:RSA是一种非对称...
Delphi由Embarcadero Technologies开发,提供了一个集成开发环境(IDE),其中包括一个强大的编译器和一套完整的类库,支持创建Windows、macOS、iOS和Android等平台的应用程序。它的特点是快速开发,因为它的编译器...
它利用了C++语言的优势,并且基于OpenSSL库来实现加密算法,包括RSA、AES、3DES以及BASE64和MD5等。 1. **JNI(Java Native Interface)**:这是Java平台的一部分,允许Java代码调用原生方法(用C、C++或其他本地...
- **Linux加密工具md5sum**:用于计算文件的MD5校验和,这是对文件内容的一种哈希表示,可以检测文件是否被篡改。 1. **FDE原理与流程** FDE的加密流程通常包括以下步骤: - **启动时**:设备启动时,用户需要输入...
RSAHelper.java:RSA加解密工具。 SignatureHelper.java:MD5, SHA-1签名工具。 Base64.java及Hex.java:字符串与字节码转换工具。 Base64如报错,请用security中的jar文件换掉JRE/lib/security中的jar包。 PS...
3. **哈希函数**:哈希函数如MD5和SHA家族,可以将任意长度的输入转换为固定长度的输出,常用于密码存储和文件校验。Android中的MessageDigest类可用于计算哈希值,UOpenCryption可能提供了便捷的接口来使用这些哈希...