C#使用伪随机数实现加密用户密码的方法
作者:shichen2014 发布时间:2023-06-27 05:27:56
标签:C#,伪随机数,加密,密码
本文所述实例为使用伪随机数进行用户密码加密,这段代码为核心部分主要代码,需要配合其它的程序实现,感兴趣的读者可以自己进一步加以完善,不费话了,下面列出主要代码:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace PRanDataEncrypt
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
if (textBox3.Text != "")
{
if (DecryptPwd(textBox3.Text) == textBox2.Text)
MessageBox.Show("用户登录成功!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
else
MessageBox.Show("用户密码错误!", "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
private void button2_Click(object sender, EventArgs e)
{
textBox1.Text = textBox2.Text = textBox3.Text = string.Empty;
textBox2.Focus();
}
private void textBox2_TextChanged(object sender, EventArgs e)
{
textBox3.Text = EncryptPwd(textBox2.Text);
}
//定义加密用户密码所用的伪随机数
private string randStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyz";
#region 使用伪随机数加密用户登录密码
/// <summary>
/// 使用伪随机数加密用户登录密码
/// </summary>
/// <param name="str">用户登录密码</param>
/// <returns>加密后的用户登录密码</returns>
private string EncryptPwd(string str)
{
byte[] btData = Encoding.Default.GetBytes(str);
int j, k, m;
int len = randStr.Length;
StringBuilder sb = new StringBuilder();
Random rand = new Random();
for (int i = 0; i < btData.Length; i++)
{
j = (byte)rand.Next(6);
btData[i] = (byte)((int)btData[i] ^ j);
k = (int)btData[i] % len;
m = (int)btData[i] / len;
m = m * 8 + j;
sb.Append(randStr.Substring(k, 1) + randStr.Substring(m, 1));
}
return sb.ToString();
}
#endregion
#region 解密用户登录密码
/// <summary>
/// 解密用户登录密码
/// </summary>
/// <param name="str">经过加密的用户登录密码</param>
/// <returns>解密后的用户登录密码</returns>
private string DecryptPwd(string str)
{
try
{
int j, k, m, n = 0;
int len = randStr.Length;
byte[] btData = new byte[str.Length / 2];
for (int i = 0; i < str.Length; i += 2)
{
k = randStr.IndexOf(str[i]);
m = randStr.IndexOf(str[i + 1]);
j = m / 8;
m = m - j * 8;
btData[n] = (byte)(j * len + k);
btData[n] = (byte)((int)btData[n] ^ m);
n++;
}
return Encoding.Default.GetString(btData);
}
catch { return ""; }
}
#endregion
}
}
0
投稿
猜你喜欢
- 上一章节回顾:Netty分布式源码分析监听读事件概述pipeline, 顾名思义, 就是管道的意思, 在net
- 本文实例为大家分享了java实现通过绑定邮箱找回密码功能,供大家参考,具体内容如下1.输入用户名及验证码,验证用户名是否存在(1).生成验证
- java jdbc连接和使用jdbc导入驱动//jar是已经打包好的class文件集,可以引用到其他工程中 //Build Pa
- 本文主要给大家介绍了关于Java8中Optional类型和Kotlin中可空类型使用的相关内容,分享出来供大家参考学习,下面话不多说了,来一
- 前言:在 Spring 中, IOC 是很重要的概念,其本质就是 map 结构,存储容器和业务 Be
- File类简介package com.file;import java.io.File;import java.io.IOException
- 前言:mongodb是一个基于分布式文件存储的开源数据库系统。mongodb与我们平常使用的mysql的区别: 1.
- java中Hashmap的get方法map中存储的是键值对,也就是说通过set方法进行参数和值的存储,之后通过get“键”的形式进行值的读取
- 在程序中封装了一个List集合对象,然后需要把该集合中的实体插入到数据库中,由于项目使用了Spring+MyBatis的配置,所以打算使用M
- 使用datatables自带后台查询 前台代码:<!DOCTYPE html><html><head>&
- 标准c++中string类函数介绍注意不是CString之所以抛弃char*的字符串而选用C++标准程序库中的string类,是因为他和前者
- 今天在码代码的时候突然想到这个问题,觉得有点困惑。在网上也翻阅不少帖子其中有一个帖子给了我一个思路,其实也是解释了基础概念。概念一:try
- 在Java移动文件夹及其所有子文件与子文件夹可以有如下的一段简单的方法来说明:public static void moveFolder(S
- 目录Jacoco原理简介使用Jacoco生成代码执行覆盖率报告小结Jacoco是Java Code Coverage的缩写,顾名思义,它是获
- 首先 下载 jedis.jar包然后再 工程设置里面找到Libraries,点击+。添加下载好的jedis.jar包。点击OK退出即可创建J
- 1. 将对象转换为JSON字符串,返回值为一个JSON字符串public static String toJson(Object value
- 前言嵌套查询的实现原理为两次查询,比如产品表为主表,图片表为从表通过product_id字段与产品表id字段关联实现一对多,嵌套查询 首先查
- 对Element和Node有困惑是因为对xml整个结构不了解,以下作为一个简要概述:以下图为w3c.org网站的xml文档树图:从上图可以看
- //执行顺序:(优先级从高到低。)静态代码块>mian方法>构造代码块>构造方法。其中静态代码块只执行一次。构造代码块在每
- 由于最近公司在开发一款后台与安卓的更新系统,经过再三研究之后,也是选择Mqtt这个目前流行的框架。为了能够让项目运营起来,最终虽说是选择Ac