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

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

时间:2023-12-22 15:44:46浏览次数:43  
标签:forName UTF C# Charset static Java ASCII 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个字符。
  2. ISO-8859-1 (Latin-1)

    • Charset.forName("ISO-8859-1")
    • 对西欧语言进行编码,是ASCII的超集。
  3. UTF-8

    • Charset.forName("UTF-8")
    • 一种变长编码,用于表示Unicode字符集。它是目前最常用的编码之一,能够表示世界上几乎所有的书写系统。
  4. UTF-16

    • Charset.forName("UTF-16")
    • 使用16位单元对Unicode字符进行编码。它能够表示所有的Unicode字符。
  5. UTF-16BE 和 UTF-16LE

    • Charset.forName("UTF-16BE")
    • Charset.forName("UTF-16LE")
    • 它们是UTF-16的两种变体,分别代表大端和小端字节序。
  6. 其他
    还有许多其他的字符集和编码,例如 Charset.forName("GB2312")(用于简体中文)和 Charset.forName("Shift_JIS")(用于日语)等。

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

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

标签:forName,UTF,C#,Charset,static,Java,ASCII,public,md5
From: https://www.cnblogs.com/vipsoft/p/17921381.html

相关文章

  • android添加c语言的可执行程序
    在android源码的external目录下添加test目录。在test目录下新建test.c文件和Android.mk文件。test.c文件例如:#include<stdio.h>intmain(){printf("helloworld\n");return0;}Android.mk文件:LOCAL_PATH:=$(callmy-dir)include$(CLEAR_VARS)LO......
  • Windows:cmd更换字体以及字体大小
    1、下载字体文件.ttf(MicrosoftYaHeiMono.ttf),并安装字体到本地系统MicrosoftYaHeiMono.ttf字体链接2、注册表修改cmd默认字体注册表字体路径:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WindowsNT\CurrentVersion\Console\TrueTypeFont修改936的数据值为:*MicrosoftYaHeiMon......
  • centos安装pg数据库
     1.下载yum源yuminstall-yhttps://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm2.安装libzstd否则安装数据库报错Requires:libzstd.so.1()(64bit)yuminstall-ywgetwgethttps://download-ib01.fedoraproject.o......
  • gitconfig常用配置
    1.gitconfigGit的配置有三个级别:项目级别的配置、用户级别的配置和系统级别的配置。项目级别的配置:每个Git仓库都可以有一个项目级别的配置文件,位于仓库的 .git/config 文件中。该配置文件只适用于当前仓库,它包含了仓库特定的配置选项,如远程仓库的URL、分支的跟踪关系......
  • ceph集群搭建详细教程(ceph-deploy)
    ceph-deploy比较适合生产环境,不是用cephadm搭建。相对麻烦一些,但是并不难,细节把握好就行,只是命令多一些而已。实验环境服务器主机public网段IP(对外服务)cluster网段IP(集群通信)角色deploy192.168.2.120用于部署集群、管理集群ceph-node1192.168.2.121192.168.6......
  • Camstar弹出自定义VP
    写在公共类里:  主页面代码如下: 按钮里写代码,或者某方法里写主页面的传递参数定义:  弹出页面如下:   弹出页面代码如下: ......
  • electron的渲染进程使用axios时被csp安全拦截的解决方案
    1、问题出现场景脚手架用的是electron-vite,渲染进程是vue3+pinia+vue-router,http请求是使用的axios,在发起请求时发现控制台报csp问题 2、原因分析csp其实就是跨域问题,不支持非同源的资源访问,以往开发普通的vue项目时因为有脚手架里的代理,所以不会出现这种......
  • [问题记录] C# 使用NPOI操作Excel模版写入数据 - 生成文件打开时提示 "发现 XXX.xlsx
    解决方案:1.先确保原来的模版文件打开是正常的,没有提示要恢复2.用Office打开这个模版文件,另存为一个文件。用这个文件来作为模版使用。 问题描述:使用C#NPOI操作Excel模版(模版用office打开是正常的),写入数据,导出的文件打开时提示是否尝试恢复,点击“是”后,发现Excel内......
  • cv表格抓取
    "cv表格抓取"可能指的是使用OpenCV库来识别和提取图像中的表格数据。这通常涉及以下步骤¹²:灰度化:将彩色图像转换为灰度图像。二值化:将图像转换为只有黑白两种颜色的图像,以便于处理。识别横线和竖线:使用形态学操作(如膨胀和腐蚀)来识别图像中的横线和竖线。计算交点:计算横线和竖线的......
  • ETLCloud与简道云结合,实现企业信息同步​
    ETLCloud介绍ETLCloud是一个集离线数据集成ETL、ELT、CDC实时数据集成、编排调度、数据服务API为一体的数据集成平台(DataOps),一站式满足企业的各种最为复杂的数据集成场景。提供私有化部署能力和云原生架构,满足企业不同发展阶段的业务需求。提供开放的组件市场,企业通过本平台可......