想自己写一个非常简单的加密程序?

麻烦的一笔 2010-05-24 03:04:49
我的设想是这样的,我想对用户名进行加密,用户名可能是由数字组成的,可能是由字母组成的
或者是由字母和数字组合而成的,如果一个用户名是qwe8254,我想对该用户的每个字符向左偏移3--5位
打个比方a偏移3位是d,1偏移3位是4,依次类推,有没人能给出代码参考?顺便给出解密的方案?
...全文
383 26 打赏 收藏 转发到动态 举报
写回复
用AI写文章
26 条回复
切换为时间正序
请发表友善的回复…
发表回复
GooKit 2011-06-01
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 yourswtr 的回复:]
C# code

#region AES对称加密开始

/// <summary>
/// 获取: AES对称算法密钥 byte 数组
/// </summary>
/// <param name="key">密钥字符串: string</param>
/// <returns>返回对称……
[/Quote]

  • 打赏
  • 举报
回复
[Quote=引用 16 楼 li277680701 的回复:]

开源项目zencart的加密
虽然是php的不过思想应该都是一样的,大家一起共勉

PHP code

<?php

function zen_not_null($value) {
if (is_array($value)) {
if (sizeof($value) > 0) {
return true;
} else {
……
[/Quote]

这里加密是:
1.搞一个随机数
2.把这个随机数md5加密
3.把第二步那个md5值切割前两位
4.把第三步得到的两位字符串加到输入密码前面
5.根据第四步的字符串md5加上第三步的道的两位字符用:连接起来 存到数据库里
解密:
1.把查询出来的秘密(数据库中存储的)根据:分割字符串
2.把冒号后面的字符串和输入的秘密相加然后md5这个字符串
3.把第二步的那个字符串和第一步分割出来的冒号前面的比对如果相同则成功
qq234121906 2010-05-29
  • 打赏
  • 举报
回复
[Quote=引用 20 楼 qwe8254 的回复:]
引用 14 楼 qq234121906 的回复:
C# code

// 创建Key
public string GenerateKey()
{
DESCryptoServiceProvider desCrypto = (DESCryptoServiceProvider)DESCryptoServiceProvider.Create();
return ……

我想请问下14楼的……
[/Quote]


首先这个KEY ,你得存起来。
stepday 2010-05-29
  • 打赏
  • 举报
回复
采用对称加密吧
lcomplete 2010-05-29
  • 打赏
  • 举报
回复
用异或加密吧 很简单的

新群DotNet Programmer 群号112850311
欢迎DotNet程序员的加入,来吧,我们共同打造一个好的学习交流场所,我们真诚欢迎您的加入。
麻烦的一笔 2010-05-28
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 qq234121906 的回复:]
C# code

// 创建Key
public string GenerateKey()
{
DESCryptoServiceProvider desCrypto = (DESCryptoServiceProvider)DESCryptoServiceProvider.Create();
return ……
[/Quote]
我想请问下14楼的你的加密解密方法第二个参数skey有什么用处?这两个方法如何调用的?
  • 打赏
  • 举报
回复
哇咔咔~~
麻烦的一笔 2010-05-25
  • 打赏
  • 举报
回复
谢谢各位,楼上有几位的想法还是值得借谦的,暂不结贴,这段时间比较忙,等有空了要研究下!
newdigitime 2010-05-24
  • 打赏
  • 举报
回复
呵呵,想法可取,不过实用还是用内建的加密法吧.
yoursWTR 2010-05-24
  • 打赏
  • 举报
回复

#region AES对称加密开始

/// <summary>
/// 获取: AES对称算法密钥 byte 数组
/// </summary>
/// <param name="key">密钥字符串: string</param>
/// <returns>返回对称算法的密钥 byte 数组: byte[]</returns>
private static byte[] AESKey(string key)
{
using (SymmetricAlgorithm symmetricAlgorithm = new RijndaelManaged())
{
symmetricAlgorithm.GenerateKey();
byte[] byteArray = symmetricAlgorithm.Key;
if (key.Length > byteArray.Length)
key = key.Substring(0, byteArray.Length);
else if (key.Length < byteArray.Length)
key = key.PadRight(byteArray.Length, ' ');
return ASCIIEncoding.ASCII.GetBytes(key);
}
}

/// <summary>
/// 获取: AES对称算法初始化向量 byte 数组
/// </summary>
/// <param name="iv">初始化向量字符串: string</param>
/// <returns>返回对称算法初始化向量 byte 数组: byte[]</returns>
private static byte[] AESIV(string iv)
{
using (SymmetricAlgorithm symmetricAlgorithm = new RijndaelManaged())
{
symmetricAlgorithm.GenerateIV();
byte[] byteArray = symmetricAlgorithm.IV;
if (iv.Length > byteArray.Length)
iv = iv.Substring(0, byteArray.Length);
else if (iv.Length < byteArray.Length)
iv = iv.PadRight(byteArray.Length, ' ');
return ASCIIEncoding.ASCII.GetBytes(iv);
}
}

/// <summary>
/// 获取: System.Security.Cryptography.Aes 对称加密字符串
/// </summary>
/// <param name="s">待加密字符串: string</param>
/// <param name="key">密钥字符串: string</param>
/// <param name="iv">初始化向量字符串: string</param>
/// <returns>返回对称加密字符串: string</returns>
public static string AESEncrypt(string s, string key, string iv)
{
byte[] byteArray = UTF8Encoding.UTF8.GetBytes(s);
using (MemoryStream memoryStream = new MemoryStream())
{
Aes aes = new AesCryptoServiceProvider();
CryptoStream cryptoStream = new CryptoStream(memoryStream, aes.CreateEncryptor(AESKey(key), AESIV(iv)), CryptoStreamMode.Write);
aes.Clear();
cryptoStream.Write(byteArray, 0, byteArray.Length);
cryptoStream.Dispose();
return Convert.ToBase64String(memoryStream.ToArray());
}
}

/// <summary>
/// 获取: System.Security.Cryptography.Aes 对称解密字符串
/// </summary>
/// <param name="s">待解密字符串: string</param>
/// <param name="key">密钥字符串: string</param>
/// <param name="iv">初始化向量字符串: string</param>
/// <returns>返回对称解密字符串: string</returns>
public static string AESDecrypt(string s, string key, string iv)
{
byte[] byteArray = Convert.FromBase64String(s);
MemoryStream memoryStream = new MemoryStream(byteArray, 0, byteArray.Length);
Aes aes = new AesCryptoServiceProvider();
CryptoStream cryptoStream = new CryptoStream(memoryStream, aes.CreateDecryptor(AESKey(key), AESIV(iv)), CryptoStreamMode.Read);
return new StreamReader(cryptoStream).ReadToEnd();
}

/// <summary>
/// 获取: 验证字符串与 System.Security.Cryptography.Aes 对称加密字符串比较值,相等返回 true,反之 false
/// </summary>
/// <param name="s">验证字符串: string</param>
/// <param name="aes">System.Security.Cryptography.Aes 对称加密字符串: string</param>
/// <param name="key">密钥字符串: string</param>
/// <param name="iv">初始化向量字符串: string</param>
/// <returns>返回字符串与 System.Security.Cryptography.Aes 对称加密字符串比较值: bool</returns>
public static bool AESVerify(string s, string aes, string key, string iv)
{
string e = AESEncrypt(s, key, iv);
string d = AESDecrypt(aes, key, iv);
StringComparer comparer = StringComparer.Ordinal;
if (0 == comparer.Compare(e, aes) && 0 == comparer.Compare(d, s))
return true;
else
return false;
}


#endregion AES对称加密结束
  • 打赏
  • 举报
回复
开源项目zencart的加密
虽然是php的不过思想应该都是一样的,大家一起共勉


<?php

function zen_not_null($value) {
if (is_array($value)) {
if (sizeof($value) > 0) {
return true;
} else {
return false;
}
} elseif( is_a( $value, 'queryFactoryResult' ) ) {
if (sizeof($value->result) > 0) {
return true;
} else {
return false;
}
} else {
if (($value != '') && (strtolower($value) != 'null') && (strlen(trim($value)) > 0)) {
return true;
} else {
return false;
}
}
}

function zen_validate_password($plain, $encrypted) {
if (zen_not_null($plain) && zen_not_null($encrypted)) {
$stack = explode(':', $encrypted);

if (sizeof($stack) != 2) return false;

if (md5($stack[1] . $plain) == $stack[0]) {
return true;
}
}

return false;
}

function zen_rand($min = null, $max = null) {
static $seeded;

if (!isset($seeded)) {
mt_srand((double)microtime()*1000000);
$seeded = true;
}

if (isset($min) && isset($max)) {
if ($min >= $max) {
return $min;
} else {
return mt_rand($min, $max);
}
} else {
return mt_rand();
}
}

function zen_encrypt_password($plain) {
$password = '';

for ($i=0; $i<10; $i++) {
$password .= zen_rand();
}

$salt = substr(md5($password), 0, 2);

$password = md5($salt . $plain) . ':' . $salt;

return $password;
}

echo zen_encrypt_password('小五');

echo zen_validate_password('小五', 'd0be8c8321931bf2845ad46bf3979f25:ae')?'成功':'失败';
?>

woainilei 2010-05-24
  • 打赏
  • 举报
回复
我来学习得。。。
qq234121906 2010-05-24
  • 打赏
  • 举报
回复

// 创建Key
public string GenerateKey()
{
DESCryptoServiceProvider desCrypto = (DESCryptoServiceProvider)DESCryptoServiceProvider.Create();
return ASCIIEncoding.ASCII.GetString(desCrypto.Key);
}
// 加密字符串
public string EncryptString(string sInputString, string sKey)
{
byte[] data = Encoding.UTF8.GetBytes(sInputString);
DESCryptoServiceProvider DES = new DESCryptoServiceProvider();
DES.Key = ASCIIEncoding.ASCII.GetBytes(sKey);
DES.IV = ASCIIEncoding.ASCII.GetBytes(sKey);
ICryptoTransform desencrypt = DES.CreateEncryptor();
byte[] result = desencrypt.TransformFinalBlock(data, 0, data.Length);
return BitConverter.ToString(result);
}
// 解密字符串
public string DecryptString(string sInputString, string sKey)
{
string[] sInput = sInputString.Split("-".ToCharArray());
byte[] data = new byte[sInput.Length];
for (int i = 0; i < sInput.Length; i++)
{
data[i] = byte.Parse(sInput[i], NumberStyles.HexNumber);
}
DESCryptoServiceProvider DES = new DESCryptoServiceProvider();
DES.Key = ASCIIEncoding.ASCII.GetBytes(sKey);
DES.IV = ASCIIEncoding.ASCII.GetBytes(sKey);
ICryptoTransform desencrypt = DES.CreateDecryptor();
byte[] result = desencrypt.TransformFinalBlock(data, 0, data.Length);
return Encoding.UTF8.GetString(result);
}



这是我测试成功的、、~~
上面的哪个是我看别人的。
xlj_2008 2010-05-24
  • 打赏
  • 举报
回复
帮顶~~~~~·
vrhero 2010-05-24
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 qq234121906 的回复:]
MD5加密法[/Quote]
谁告诉过你MD5可以做这种加密?如何解密?

楼主,你“设想”的这种解密算法叫凯撒算法,是两千多年前古罗马凯撒大帝发明的...破译难度为0...
zdc198771 2010-05-24
  • 打赏
  • 举报
回复
我在想能不能把1G长度的字符串加密成32位的MD5
testmemo 2010-05-24
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 qq234121906 的回复:]
C# code

public string Encrypt(string Source)
{
byte[] data = UTF8Encoding.UTF8.GetBytes(Source);
// This is one implementation of the abstract class MD5.
……
[/Quote]

顶一个
天下在我心 2010-05-24
  • 打赏
  • 举报
回复
用MD5不是很好嘛,现成可用不可逆.
aluogang 2010-05-24
  • 打赏
  • 举报
回复
何必搞那么复杂
System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile
就这个不也挺好
zdc198771 2010-05-24
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 mohugomohu 的回复:]
引用 4 楼 zdc198771 的回复:

C# code
public string Encrypt(string tmp)
{
StringBuilder result = new StringBuilder();
for (int i = 0; i < tmp.Length; i++)
{
cha……

朋友,如果我的字符大于256的话,你这个就爆缸了,应该加个判断啊
[/Quote]

恩,很有道理。。。如果输入个中文直接爆炸,哈哈
加载更多回复(6)

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧