首页 > 编程语言 >如何 使 Java、C# md5 加密的值保持一致

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

时间:2023-12-26 18:04:16浏览次数:41  
标签:forName UTF C# Charset System static Java public 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字符,通常是一个很好的选择。


作者:VipSoft

标签:forName,UTF,C#,Charset,System,static,Java,public,md5
From: https://blog.51cto.com/u_15116285/8985926

相关文章

  • html jquery from 表单提交 application/x-www-form-urlencoded 改成 json
    htmljqueryfrom表单提交$(form).ajaxSubmitapplication/x-www-form-urlencoded改成json<formclass="formform-horizontal"id="form-admin-add"><divclass="rowcl"><labelclass="form-labelcol-xs-4col-......
  • java状态模式
    1定义一个接口2publicinterfaceState{3publicvoidhandle();4}567/**8*具体的状态角色(下单)9*CreatedbyAdministrator10*/11publicclassPlaceAnOrderimplementsState{12//具体化状态的行为13@Override14public......
  • 基于OpenCV的语音数据读取
     1)进入http://yuyin.baidu.com/app,在弹出的界面中单击要针对哪个应用开通语音识别服务,个人测试可全选(开通个人认证,白嫖)   注意:1、百度语音识别API对于要识别的音频源是有要求的:原始PCM的录音参数必须符合8k/16k采样率、16位深、单声道,支持的压缩格式有:pcm(不压缩)、wa......
  • 适合高性能、通用和强大的应用 DSPIC33CK32MP102-I/2N、DSPIC33CK32MP102-I/M6、DSPIC
    概览:dsPIC33CK64MP10x系列数字信号控制器(DSC)采用100MHzdsPIC®DSC内核,集成DSP和增强型片上外设。这些DSC支持数字电源、电机控制、高级检测和控制、高性能通用和鲁棒应用的设计。在数字电源领域,该系列器件是PFC应用、无线电源和高密度DC-DC应用的理想选择。这些DSC也非常适合......
  • 汉字在unicode的编码情况-From http://yedict.com/zsts.htm
    字符集内容字数unicode编码字符显示说明(除非安装更大字库)基本区 分页:  一 二 三 四共20902字4E00-9FA5电脑和手机都能显示基本区补充共90字9FA6-9FFF电脑或安卓5以上的手机能显示一部分扩展A共6582字3400-4DB5电脑和手机都能显示扩展A补充共10......
  • NDK-以十六进制字符串的形式打印char[]数组到logcat
    NDK-以十六进制字符串的形式打印char[]数组到logcat1.在Java中打印publicstaticStringconvertByteArr2String(byte[]bArr){StringBuilderbuilder=newStringBuilder();for(inti=0;i<bArr.length;i++){builder.append(String.format(Locale......
  • __new__(cls)方法详解
    只要是面向对象的编程语言,类的实例化一定包含两个步骤:(1)在内存中创建对象,即开辟一块内存空间来存放类的实例化对象(Instance);(2)初始化对象,即给实例的属性赋予初始值。在python中,第一步由__new__函数负责,第二步由__init__函数负责。__new__的返回值是__init__中的self如果__n......
  • v-for v-if不建议一起用 解决办法 使用 computed
    <el-table-columnv-for="(item,index)innewDynamicColumns":key="index":prop="item.prop":label="item.label":align="item.align":width=&qu......
  • vs 使用 jsonschema
    使用jsonschema限制json配置文件内容vs配置文件中,添加\(schema,映射对应的json文件,此文件可以根据现有json文件通过工具生成基础的内容"\)schema":"http://127.0.0.1/webapibase.json",jsonschema文档https://json-schema.apifox.cn/工具https://hellosean1025.gith......
  • 小A的爸爸今年a岁,他比小A年长b岁,又比小A的奶奶年轻c岁请问小A和他的奶奶今年年龄多少?
    题目描述小A的爸爸今年a岁,他比小A年长b岁,又比小A的奶奶年轻c岁请问小A和他的奶奶今年年龄多少?输入格式第一行输入三个正整数a,b,c,以空格隔开代码描述:include<stdio.h>intmain(){inta;//小A的爸爸a岁intb;//小A的爸爸比小A大的岁数intc;//小A的爸爸比小A奶......