0

0

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

高洛峰

高洛峰

发布时间:2017-01-24 11:29:44

|

1931人浏览过

|

来源于php中文网

原创

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 = "140865665237544398577638791993321201143991791099370252934699963963887058026979531275917645451893685346013654333931757603593193739776986525943697469996693704995753266331593233395038088698299308180612215713544577462613426793519824197226393059683065343801412208205295045502348474411031999124124137863144916358656019"; 
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 md5加密与rsa加解密实现代码相关文章请关注php中文网!

Snowy(SnowyAdmin)快速开发平台3.5.1
Snowy(SnowyAdmin)快速开发平台3.5.1

Snowy(SnowyAdmin)是国内首个国密前后端分离快速开发平台,集成国密加解密插件, 软件层面完全符合等保测评要求,同时实现国产化机型、中间件、数据库适配,是您的不二之选! 技术框架与密码结合,让更多的人认识密码,使用密码;更是让前后分离“密”不可分。采用SpringBoot+MybatisPlus+AntDesignVue+Vite 等更多组件及前沿技术开发,注释丰富,代码简洁,开箱即用

下载

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
C++ 设计模式与软件架构
C++ 设计模式与软件架构

本专题深入讲解 C++ 中的常见设计模式与架构优化,包括单例模式、工厂模式、观察者模式、策略模式、命令模式等,结合实际案例展示如何在 C++ 项目中应用这些模式提升代码可维护性与扩展性。通过案例分析,帮助开发者掌握 如何运用设计模式构建高质量的软件架构,提升系统的灵活性与可扩展性。

4

2026.01.30

c++ 字符串格式化
c++ 字符串格式化

本专题整合了c++字符串格式化用法、输出技巧、实践等等内容,阅读专题下面的文章了解更多详细内容。

2

2026.01.30

java 字符串格式化
java 字符串格式化

本专题整合了java如何进行字符串格式化相关教程、使用解析、方法详解等等内容。阅读专题下面的文章了解更多详细教程。

1

2026.01.30

python 字符串格式化
python 字符串格式化

本专题整合了python字符串格式化教程、实践、方法、进阶等等相关内容,阅读专题下面的文章了解更多详细操作。

1

2026.01.30

java入门学习合集
java入门学习合集

本专题整合了java入门学习指南、初学者项目实战、入门到精通等等内容,阅读专题下面的文章了解更多详细学习方法。

20

2026.01.29

java配置环境变量教程合集
java配置环境变量教程合集

本专题整合了java配置环境变量设置、步骤、安装jdk、避免冲突等等相关内容,阅读专题下面的文章了解更多详细操作。

16

2026.01.29

java成品学习网站推荐大全
java成品学习网站推荐大全

本专题整合了java成品网站、在线成品网站源码、源码入口等等相关内容,阅读专题下面的文章了解更多详细推荐内容。

18

2026.01.29

Java字符串处理使用教程合集
Java字符串处理使用教程合集

本专题整合了Java字符串截取、处理、使用、实战等等教程内容,阅读专题下面的文章了解详细操作教程。

3

2026.01.29

Java空对象相关教程合集
Java空对象相关教程合集

本专题整合了Java空对象相关教程,阅读专题下面的文章了解更多详细内容。

6

2026.01.29

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
简单聊聊mysql8与网络通信
简单聊聊mysql8与网络通信

共1课时 | 815人学习

PHP数字签名与加密解密
PHP数字签名与加密解密

共12课时 | 1.3万人学习

Codeigniter 3 中文开发手册
Codeigniter 3 中文开发手册

共0课时 | 0人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号