如何 使 Java、C# md5 加密的值保持一致

本文涉及的产品
密钥管理服务KMS,1000个密钥,100个凭据,1个月
简介: 如何 使 Java、C# md5 加密的值保持一致

Java C# md5 加密值保持一致,一般是编码不一致造成的值不同

JAVA (加密:123456) C#(加密:123456)
UTF-8 e10adc3949ba59abbe56e057f20f883e UTF8 e10adc3949ba59abbe56e057f20f883e
UTF-16LE ce0bfd15059b68d67688884d7a3d3e8c Unicode ce0bfd15059b68d67688884d7a3d3e8c
US-ASCII e10adc3949ba59abbe56e057f20f883e ASCII e10adc3949ba59abbe56e057f20f883e
ISO-8859-1 e10adc3949ba59abbe56e057f20f883e --- ---
UTF-16BE ef4dafda494ad517e9823ae7d102a4c8 BigEndianUnicode ef4dafda494ad517e9823ae7d102a4c8
UTF-16LE ce0bfd15059b68d67688884d7a3d3e8c
UTF-16 5231722c0787fbf7b277a4a136f6e245
--- --- UTF32 4fc043750a2441defd8e35d2e23e84f0
--- --- UTF7 e10adc3949ba59abbe56e057f20f883e

Java 代码如下

package com.vipsoft.core.util;
import java.security.MessageDigest;
public class Md5Helper {
    public static final String EMPTY_STRING = "";
    private final static String[] hexDigits = {"0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "a", "b", "c", "d", "e", "f"};
    private static String byteToHexString(byte b) {
        int n = b;
        if (n < 0) {
            n = 256 + n;
        }
        int d1 = n / 16;
        int d2 = n % 16;
        return hexDigits[d1] + hexDigits[d2];
    }
    private static String byteArrayToHexString(byte[] b) {
        StringBuffer sb = new StringBuffer();
        for (int i = 0; i < b.length; i++) {
            sb.append(byteToHexString(b[i]));
        }
        return sb.toString();
    }
    public static String MD5Encode(String origin) {
        String result = null;
        try {
            result = origin;
            MessageDigest md = MessageDigest.getInstance("MD5");
            result = byteArrayToHexString(md.digest(result.getBytes("UTF-8")));
        } catch (Exception ex) {
            ex.printStackTrace();
        }
        return result;
    }
}

C# 代码如下

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Security.Cryptography;
using System.Text;
using System.Threading.Tasks;
namespace VipSoft.Core
{
    public class Md5Helper
    {
        public static string MD5Encode(string origin)
        {
            var md5 = new MD5CryptoServiceProvider();
            byte[] clearBytes = System.Text.Encoding.UTF8.GetBytes(origin);
            byte[] targetData = md5.ComputeHash(clearBytes);
            string byte2String = BitConverter.ToString(targetData); 
            return byte2String.Replace("-","").ToLower();
        }
    }
}

C# => System.Text.Encoding.UTF8

JAVA => StandardCharsets

package java.nio.charset;
/**
 * Constant definitions for the standard {@link Charset Charsets}. These
 * charsets are guaranteed to be available on every implementation of the Java
 * platform.
 *
 * @see <a href="Charset#standard">Standard Charsets</a>
 * @since 1.7
 */
public final class StandardCharsets {
    private StandardCharsets() {
        throw new AssertionError("No java.nio.charset.StandardCharsets instances for you!");
    }
    /**
     * Seven-bit ASCII, a.k.a. ISO646-US, a.k.a. the Basic Latin block of the
     * Unicode character set
     */
    public static final Charset US_ASCII = Charset.forName("US-ASCII");
    /**
     * ISO Latin Alphabet No. 1, a.k.a. ISO-LATIN-1
     */
    public static final Charset ISO_8859_1 = Charset.forName("ISO-8859-1");
    /**
     * Eight-bit UCS Transformation Format
     */
    public static final Charset UTF_8 = Charset.forName("UTF-8");
    /**
     * Sixteen-bit UCS Transformation Format, big-endian byte order
     */
    public static final Charset UTF_16BE = Charset.forName("UTF-16BE");
    /**
     * Sixteen-bit UCS Transformation Format, little-endian byte order
     */
    public static final Charset UTF_16LE = Charset.forName("UTF-16LE");
    /**
     * Sixteen-bit UCS Transformation Format, byte order identified by an
     * optional byte-order mark
     */
    public static final Charset UTF_16 = Charset.forName("UTF-16");
}

Charset 是 Java 中的一个类,它代表了字符集。字符集是一组字符的集合,每个字符都有一个唯一的数字表示。Charset 类提供了一组预定义的常量来表示常见的字符集。

以下是一些常见的 Charset 编码常量:

  1. US-ASCII
  • Charset.forName("US-ASCII")
  • 7位ASCII字符集,包括128个字符。
  1. ISO-8859-1 (Latin-1)
  • Charset.forName("ISO-8859-1")
  • 对西欧语言进行编码,是ASCII的超集。
  1. UTF-8
  • Charset.forName("UTF-8")
  • 一种变长编码,用于表示Unicode字符集。它是目前最常用的编码之一,能够表示世界上几乎所有的书写系统。
  1. UTF-16
  • Charset.forName("UTF-16")
  • 使用16位单元对Unicode字符进行编码。它能够表示所有的Unicode字符。
  1. UTF-16BE 和 UTF-16LE
  • Charset.forName("UTF-16BE")
  • Charset.forName("UTF-16LE")
  • 它们是UTF-16的两种变体,分别代表大端和小端字节序。
  1. 其他
    还有许多其他的字符集和编码,例如 Charset.forName("GB2312")(用于简体中文)和 Charset.forName("Shift_JIS")(用于日语)等。

当处理文本数据时,选择合适的字符集非常重要,因为错误的字符集可能会导致乱码或数据丢失。UTF-8 由于其广泛的兼容性和能够表示几乎所有的Unicode字符,通常是一个很好的选择。

https://www.cnblogs.com/zengguoyu/p/3973483.html

目录
相关文章
|
2月前
|
Java Maven 数据安全/隐私保护
如何实现Java打包程序的加密代码混淆,避免被反编译?
【10月更文挑战第15天】如何实现Java打包程序的加密代码混淆,避免被反编译?
66 2
|
2月前
|
存储 安全 算法
C#一分钟浅谈:数据加密与解密技术
【10月更文挑战第3天】在数字化时代,信息安全至关重要。数据加密作为保障信息不被未授权访问的有效手段,通过特定算法将明文转换为密文,确保即使数据被截获也难以解读。本文从基础概念入手,介绍C#中实现数据加密的方法,涵盖对称加密(如AES、DES)与非对称加密(如RSA),并通过具体示例代码演示如何使用`System.Security.Cryptography.Aes`类完成AES加密和解密过程。此外,还强调了密钥管理及安全策略的重要性。
62 4
|
2月前
|
安全 算法 Java
数据库信息/密码加盐加密 —— Java代码手写+集成两种方式,手把手教学!保证能用!
本文提供了在数据库中对密码等敏感信息进行加盐加密的详细教程,包括手写MD5加密算法和使用Spring Security的BCryptPasswordEncoder进行加密,并强调了使用BCryptPasswordEncoder时需要注意的Spring Security配置问题。
152 0
数据库信息/密码加盐加密 —— Java代码手写+集成两种方式,手把手教学!保证能用!
|
4月前
|
存储 算法 Java
在Java中使用MD5对用户输入密码进行加密存储、同时登录验证。
这篇文章详细介绍了在Java项目中如何使用MD5算法对用户密码进行加密存储和登录验证,包括加入依赖、编写MD5工具类、注册时的密码加密和登录时的密码验证等步骤,并通过示例代码和数据库存储信息展示了测试效果。
在Java中使用MD5对用户输入密码进行加密存储、同时登录验证。
|
3月前
|
安全 Java 数据安全/隐私保护
- 代码加密混淆工具-Java 编程安全性
在Java编程领域,保护代码安全与知识产权至关重要。本文探讨了代码加密混淆工具的重要性,并介绍了五款流行工具:ProGuard、DexGuard、Jscrambler、DashO 和 Ipa Guard。这些工具通过压缩、优化、混淆和加密等手段,提升代码安全性,保护知识产权。ProGuard 是开源工具,用于压缩和混淆Java代码;DexGuard 专为Android应用程序设计,提供强大加密功能;Jscrambler 基于云,保护Web和移动应用的JavaScript及HTML5代码;DashO 支持多种Java平台和
229 1
|
4月前
|
安全 Java 应用服务中间件
网络安全的护城河:漏洞防御与加密技术深入浅出Java并发编程
【8月更文挑战第31天】在数字世界的棋盘上,每一次点击都可能是一步棋。网络安全的战场无声却激烈,漏洞如同裂缝中的风,悄无声息地侵袭着数据的堡垒。本文将揭示网络漏洞的隐蔽角落,探讨如何通过加密技术筑起防线,同时提升个人和组织的安全意识,共同守护我们的数字家园。
|
4月前
|
安全 算法 Java
java系列之~~网络通信安全 非对称加密算法的介绍说明
这篇文章介绍了非对称加密算法,包括其定义、加密解密过程、数字签名功能,以及与对称加密算法的比较,并解释了非对称加密在网络安全中的应用,特别是在公钥基础设施和信任网络中的重要性。
|
8天前
|
安全 网络安全 数据安全/隐私保护
网络安全与信息安全:关于网络安全漏洞、加密技术、安全意识等方面的知识分享
在数字化时代,网络安全和信息安全已成为我们生活中不可或缺的一部分。本文将介绍网络安全漏洞、加密技术和安全意识等方面的知识,并提供一些实用的技巧和建议,帮助读者更好地保护自己的网络安全和信息安全。
|
1天前
|
监控 安全 网络安全
网络安全与信息安全:漏洞、加密与意识的交织
在数字时代的浪潮中,网络安全与信息安全成为维护数据完整性、保密性和可用性的关键。本文深入探讨了网络安全中的漏洞概念、加密技术的应用以及提升安全意识的重要性。通过实际案例分析,揭示了网络攻击的常见模式和防御策略,强调了教育和技术并重的安全理念。旨在为读者提供一套全面的网络安全知识框架,从而在日益复杂的网络环境中保护个人和组织的资产安全。
|
2天前
|
存储 安全 算法
揭秘网络安全的盾牌与矛:漏洞防护与加密技术的较量
在数字化时代的棋局中,网络安全是每个参与者必须面对的挑战。本文将深入探讨网络安全中的两个关键角色——漏洞与加密技术。通过分析最新的安全漏洞案例,我们揭示网络攻击者如何利用这些漏洞进行破坏。同时,我们将展示加密技术如何成为保护数据不被窃取的强大盾牌。文章还将讨论提升个人和企业的安全意识的重要性,并通过实际的代码示例,展示如何在实践中应用这些知识来加强我们的网络防线。