md5作为检验数据完整性的加密算法最常用,c#实现MD5的方法

md5的C#实现方法,自定义md5方法,完全跳过现今网络上的md5库,实现md5加密的完全安全。

md5虽然很强大,但运用不好照样可以被黑。简单数字和字母的短字符串md5的加密字符在现在的网络中一下就可以查询到,也就是可以直接解密,md5库里直接就有了。所以md5的加密还是自己定义个规则,这样更安全。

请看下面例子的“自定义MD5方法”中的“Md5EncodeMamicode”,简单的实现思路,更安全的安全方法。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Security.Cryptography;

namespace M_Class
{
    /// <summary>
    /// [MD5加密][mamicode.com提供]
    /// </summary>
    public class MD5code
    {
        /// <summary>
        /// [构造函数]
        /// </summary>
        public MD5code()
        { }

        /// <summary>
        /// 默认加密方式
        /// </summary>
        /// <param name="str"></param>
        /// <returns></returns>
        public static string Md5Encode(string str)
        {
            return Md5Encode32(str);
        }

        /// <summary>
        /// 32位MD5算法加密
        /// </summary>
        /// <param name="str">需要加密的字符串</param>
        /// <returns>加密后的字符串</returns>
        public static string Md5Encode32(string str)
        {
            string password = "";
           MD5 md5 = MD5.Create();
           byte[] s = md5.ComputeHash(Encoding.UTF8.GetBytes(str));
           foreach (byte b in s)
               password += b.ToString("X2");
           return password;
        }

        #region 自定义MD5方法

        /// <summary>
        /// mamicode的MD5加密法
        /// </summary>
        /// <param name="uid">用户ID</param>
        /// <param name="MamicodePWD">需要加密的字符串</param>
        /// <returns>加密后的字符串</returns>
        public static string Md5EncodeMamicode(string uid, string MamicodePWD)
        {
            ///加密规则说明:分3步
            ///第1步:对pwd进行一次md5加密
            ///第2步:拼接新字符串,用户ID+pwd+第1步加密后字符串取第5位开始的15位字符
            ///第3步:将第2步拼接的字符串再一次md5加密

            string Secretkey1 = Md5Encode32(MamicodePWD);
            string Secretkey2 = uid + Secretkey1 + Secretkey1.Substring(5, 15);
            string Secretkey3 = Md5Encode32(Secretkey2);

            return Secretkey3;
        }

        #endregion

    }
} 
时间: 2024-12-18 23:40:20

md5作为检验数据完整性的加密算法最常用,c#实现MD5的方法的相关文章

MD5和sha1加密算法--散列加密技术 MD5:128bit的大整数

在很多电子商务和社区应用中,我们都要存放很多的客户的资料,其中包括了很多的隐私信息和客户不愿被别人看到的信息,当然好有客户执行各种操作的密码,此时就需要对客户的信息进行加密再存储,目前有两种比较好的加密算法:MD5和sha1. 这两种加密算法都属于散列加密技术.所谓散列加密就是无论输入的字符串是什么,有多大,加密后都将变成唯一的定长的加密串. 首先介绍一下MD5,MD5的全称是Message-Digest Algorithm 5,在90年代初由MIT的计算机科学实验室和RSA Data Secu

PHP获得文件的md5并检验是否被修改

由于需要判断上传的文件是否被修改过,需要记录上传文件的md5值,所以这里说一下一下获取文件md5值的方法. md5_file() md5_file() 函数计算文件的 MD5 散列.md5() 函数使用 RSA 数据安全,包括 MD5 报文摘译算法.如果成功,则返回所计算的 MD5 散列,如果失败,则返回 false. 语法:md5(string,raw) §参数string,必需,规定要计算的文件. §参数charlist,可选.规定十六进制或二进制输出格式:TRUE - 原始 16 字符二进

常用的操作正则表达式的方法+正则表达式基本元字符使用实例

常用的操作正则表达式的方法: 下面学习一下位于System.Text.RegularExpressions下的Regex类的一些静态方法和委托(只要有一段匹配就会返回true) 1,静态方法IsMatch (返回值是一个布尔类型,用于判断指定的字符串是否与正则表达式字符串匹配,它有三个重载方法) bool IsMatch(string input, string pattern); 参数: input: 要搜索匹配项的字符串. pattern: 要匹配的正则表达式模式. 返回结果: 如果正则表达

Android中常用的三种存储方法浅析

Android中常用的三种存储方法浅析 Android中数据存储有5种方式: [1]使用SharedPreferences存储数据 [2]文件存储数据 [3]SQLite数据库存储数据 [4]使用ContentProvider存储数据 [5]网络存储数据 在这里我只总结了三种我用到过的或即将可能用到的三种存储方法. 一.使用SharedPreferences存储数据 SharedPreferences是Android平台上一个轻量级的存储类,主要是保存一些常用的配置信息比如窗口状态,它的本质是基

mysql 的常用命令及常见问题解决方法

运行sql C:\Users\Martin>mysql -uroot -pyang cdm_db <d:/cdm_db.sql 运行sql mysql>source /tmp/terminal.sql; mysql忘记密码: mysqladmin -uroot flush-privileges password "newpassword" mysql的select into file命令 SELECT a,b,a+b INTO OUTFILE '/tmp/result

[C/C++基础] C语言常用函数strlen的使用方法

函数声明:extern unsigned int strlen(char *s); 所属函数库:<string.h> 功能:返回s所指的字符串的长度,其中字符串必须以'\0'结尾 参数:s为字符串的初始地址 使用举例: 代码如下 编译运行结果 说明: 函数strlen比较容易理解,其功能和sizeof很容易混淆.其中sizeof指的是字符串声明后占用的内存长度,它就是一个操作符,不是函数:而strlen则是一个函数,它从第一个字节开始往后数,直到遇见了'\0',则停止. [C/C++基础] C

js常用内置对象及方法

在js中万物皆对象:字符串,数组,数值,函数...... 内置对象都有自己的属性和方法,访问方法如下: 对象名.属性名称: 对象名.方法名称 1.Array数组对象 unshift( )    数组开头增加 功能:给数组开头增加一个或多个 参数:一个或多个 返回值:数组的长度 原数组发生改变 shift( )        数组开头删除一项 功能:给数组开头删除一个 参数:无 返回值:被删除的内容 原数组发生改变 push( )       数组末尾增加 功能:给数组末尾增加一项或多项 参数:一

常用的生成客户端脚本方法

常用的生成客户端脚本方法: RegisterArraryDeclaration -- 添加javascript数组     RegisterClientScriptBlock-- 在 Web 窗体的开始处(紧接着 <form runat="server"> 标识之后)    RegiserStartScript-- ------- 在</form>前添加script代码块 RegisterStartupScript-- 在 Web 窗体的结尾处    Regis

[C/C++基础] C语言常用函数memset的使用方法

函数声明:void *memset(void *s, int ch, size_t n); 用途:为一段内存的每一个字节都赋予ch所代表的值,该值采用ASCII编码. 所属函数库:<memory.h> 或者 <string.h> 参数:(1)s,开始内存的地址:(2)ch和n,从地址s开始,在之后的n字节长度内,把每一个字节的值都赋值为n. 使用举例: 代码如下 编译运行结果 说明: 该函数最常用的用途就是将一段新分配的内存初始化为0.例如我们代码的第9-10行. 需要注意的是,函