import java.math.BigInteger;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException; /**
* MD5加密的简单实现
* @author 【J.H】
*
*/
public class MD5Util { /**
* 对字符串进行MD5加密(小写+字母)
* @param str 要进行加密的字符串
* @return 返回MD5加密后的字符串
*/
public static String getMD5(String str) {
String md5Str = null;
try {
// 生成一个MD5加密计算摘要
MessageDigest md = MessageDigest.getInstance("MD5");
// 计算md5函数
md.update(str.getBytes());
// digest()最后确定返回md5 hash值,返回值为8为字符串。因为md5 hash值是16位的hex值,实际上就是8位的字符
// BigInteger函数则将8位的字符串转换成16位hex值,用字符串来表示;得到字符串形式的hash值
md5Str = new BigInteger(1, md.digest()).toString(16);
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
} return md5Str;
} /**
* 对字符串进行MD5加密(大写+数字)
* @param s 要进行加密的字符串
* @return 返回MD5加密后的字符串
*/
public static String MD5(String s) {
String md5Str = null;
char hexDigits[]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
try {
byte[] btInput = s.getBytes();
// 获得MD5摘要算法的 MessageDigest 对象
MessageDigest mdInst = MessageDigest.getInstance("MD5");
// 使用指定的字节更新摘要
mdInst.update(btInput);
// 获得密文
byte[] md = mdInst.digest();
// 把密文转换成十六进制的字符串形式
int j = md.length;
char str[] = new char[j * 2];
int k = 0;
for (int i = 0; i < j; i++) {
byte byte0 = md[i];
str[k++] = hexDigits[byte0 >>> 4 & 0xf];
str[k++] = hexDigits[byte0 & 0xf];
}
md5Str = new String(str);
} catch (Exception e) {
e.printStackTrace();
} return md5Str;
} public static void main(String[] args) {
String md51 = getMD5("waichu");
System.out.println(md51);
System.out.println(md51.length());
System.out.println(md51.toUpperCase());
String md52 = MD5("waichu");
System.out.println(md52);
System.out.println(md52.length());
}
}
相关文章
- 以下是一个简单的Java抢优惠券代码示例,使用Redis实现分布式锁和计数器功能
- java怎么使用取余符号,Java中的相除(/)和取余(%)的实现方法
- PySpark安装及WordCount实现(基于Ubuntu)-安装Java: PySpark需要Java运行环境。你可以使用以下命令安装OpenJDK: sudo apt update sudo apt install default-jre default-jdk 安装Scala: PySpark还需要Scala,可以使用以下命令安装: sudo apt install scala 安装Python: 如果你的系统没有Python,可以安装Python 3: sudo apt install python3 安装Apache Spark: 下载并解压Apache Spark。你可以在Apache Spark官网下载最新版本的Spark。 wget https://downloads.apache.org/spark/spark-x.y.z/spark-x.y.z-bin-hadoopx.y.tgz tar -xzvf spark-x.y.z-bin-hadoopx.y.tgz 将 spark-x.y.z-bin-hadoopx.y替换为你下载的实际版本。 设置环境变量: 在 .bashrc或 .zshrc文件中设置Spark和PySpark的环境变量: export SPARK_HOME=/path/to/spark-x.y.z-bin-hadoopx.y export PATH=$PATH:$SPARK_HOME/bin export PYSPARK_PYTHON=python3 记得使用实际的Spark路径。 安装PySpark: 使用pip安装PySpark: pip install pyspark 实现WordCount:
- 简单加密算法在C#中的实现
- C#委托(delegate)的常用方式- 委托的定义 // 委托的核心是跟委托的函数结构一样 public delegate string SayHello(string c); public delegate string SayHello(string c);:定义了一个公共委托类型 SayHello,该委托接受一个 string 类型的参数 c,并返回一个 string 类型的值。 Main 方法 static void Main(string args) { // 本质上其实就是把方法当作委托的参数 SayHello sayC = new SayHello(SayChinese); Console.WriteLine(sayC("欢迎大家")); SayHello sayE = new SayHello(SayEgnlish); Console.WriteLine(sayE("Welcome to")); // 简单的写法:必须类型一样 SayHello s1 = SayChinese; SayHello s2 = SayEgnlish; Console.WriteLine(s1("好好好")); Console.WriteLine(s2("Gooood")); // 最推荐 SayHello ss1 = con => con; Console.WriteLine(ss1("niiiice")); // 匿名委托:一次性委托 SayHello ss3 = delegate(string s) { return s; }; Console.WriteLine(ss3("说中国话")); } 常规实例化委托 SayHello sayC = new SayHello(SayChinese);:创建了一个 SayHello 委托的实例 sayC,并将 SayChinese 方法作为参数传递给委托的构造函数。 Console.WriteLine(sayC("欢迎大家"));:通过委托实例调用 SayChinese 方法,并输出结果。 同理,SayHello sayE = new SayHello(SayEgnlish); 和 Console.WriteLine(sayE("Welcome to")); 是对 SayEgnlish 方法的委托调用。 简化的委托赋值方式 SayHello s1 = SayChinese; 和 SayHello s2 = SayEgnlish;:当委托类型和方法签名一致时,可以直接将方法赋值给委托变量,无需使用 new 关键字。 Console.WriteLine(s1("好好好")); 和 Console.WriteLine(s2("Gooood"));:通过委托实例调用相应的方法。 使用 Lambda 表达式实例化委托 SayHello ss1 = con => con;:使用 Lambda 表达式创建委托实例 ss1,con => con 表示接受一个参数 con 并返回该参数本身。 Console.WriteLine(ss1("niiiice"));:通过委托实例调用 Lambda 表达式。 匿名委托 SayHello ss3 = delegate(string s) { return s; };:使用匿名委托创建委托实例 ss3,delegate(string s) { return s; } 是一个匿名方法,直接在委托实例化时定义了方法体。 Console.WriteLine(ss3("说中国话"));:通过委托实例调用匿名方法。 委托引用的方法定义 public static string SayChinese(string content) { return content; } public static string SayEgnlish(string content) { return content; } public static string SayChinese(string content) 和 public static string SayEgnlish(string content):定义了两个静态方法,分别接受一个 string 类型的参数 content,并返回该参数本身。这两个方法的签名与 SayHello 委托一致,可以被 SayHello 委托引用。 常规的委托实例化、简化的赋值方式、Lambda 表达式和匿名委托。委托在 C# 中是一种强大的机制,它允许将方法作为参数传递,实现了代码的灵活性和可扩展性。
- java中的方法返回值使用泛型,实现灵活的返回值类型
- JavaScript实现MD5 加密的6中方式
- 使用Java实现简单的计算器应用程序
- Java对于数据加密与解密的实现EncryptUtil、MD5与sha-1
- 简单说明什么是递归?什么情况会使用?并使用java实现一个简单的递归程序。