PDA

View Full Version : هش کردن پسورد و چک شدن در MYSQL



Sp|R|T
یک شنبه 17 اردیبهشت 1391, 13:46 عصر
اول اینکه اومید وارم این تاپیکم هم مثه تاپیک های دیگه بی جواب نمونه :لبخند:

خب حالا سلام :دی

برادران مهرابان، من یه برنامه ساختم که یه جور لوگین فورم داره، و یوزر پسوردش هم از مای اس کیو ال میگیره

و این MYSQL هم از پسورداش یه نوع الگریتمی سیو شده ( توسط سایم :دی ) که نمیدونم چطور با سی شارپ کرکش کنم

در واقع من نیازی به کرک کردنش رو هم ندارم، فقط میخوام پسوردی که توی لوگین فورم برنامم میزنم، یه جوری هش بشه و بعد توی MYSQL چک بشه که اگه درس بود، عملیات های دیگم رو انجام بدم :دی :دی

خب اول این عکس رو ببینین:

1-MYSQL
http://www1.tokhali.com/1.jpg

2-APP:

http://www1.tokhali.com/2.jpg

و این هم فول کدی که ساختم ولی با یه الگریتم دیگه ای داره چک میکنه:


using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using MySql.Data.MySqlClient;
using MySql.Data.Types;
using System.Security.Cryptography;

namespace WindowsFormsApplication2
{
public partial class Form1 : Form
{
MySqlConnection Conn = new MySqlConnection(@"Server=127.0.0.1;Port=3306;Database=game;User ID=root;Password=;CharSet=utf8");
public Form1()
{
InitializeComponent();
}

static string GetMd5Hash(MD5 md5Hash, string input)
{

// Convert the input string to a byte array and compute the hash.
byte[] data = md5Hash.ComputeHash(Encoding.UTF8.GetBytes(input)) ;

// Create a new Stringbuilder to collect the bytes
// and create a string.
StringBuilder sBuilder = new StringBuilder();

// Loop through each byte of the hashed data
// and format each one as a hexadecimal string.
for (int i = 0; i < data.Length; i++)
{
sBuilder.Append(data[i].ToString("x2"));
}

// Return the hexadecimal string.
return sBuilder.ToString();
}

private void btnLogin_Click(object sender, EventArgs e)
{
//For Hashed Password:

string source = txtpass.Text;
using (MD5 md5Hash = MD5.Create())
{
string hash = GetMd5Hash(md5Hash, source);

txthash.Text = (hash);

}

string query = "SELECT acct_username, acct_passhash1 FROM pvpgn_bnet Where acct_username='" + txtuser.Text + "' and acct_passhash1='" + txthash.Text + "'";
MySqlCommand Cmd = new MySqlCommand(query, Conn);
if (Conn.State == ConnectionState.Closed)
Conn.Open();
MySqlDataReader dr = Cmd.ExecuteReader();

if (dr.Read())
{
MessageBox.Show("True");

}
else
{
MessageBox.Show("Fals");
}
Conn.Close();
}
}
}



وارنینگ :دی :

پسورد سیو شده در MYSQL :

3a9fb1381f4a6c0ec1a1f97a74bccea69aac8900

که کرک شدش = 123456

و اگه از توی برنامه چک بشه، این پسورد رو میده:

e10adc3949ba59abbe56e057f20f883e

که این هم کرک شدش = 123456

........

خب سخته نیس نه؟ :لبخند:

Alghoochi
یک شنبه 17 اردیبهشت 1391, 14:52 عصر
یه سوال: سایتت با وردپرس ساخته شده؟

Sp|R|T
یک شنبه 17 اردیبهشت 1391, 15:14 عصر
پ.ن: اهههههههههه این همه تایپ کرده بودم همه چی پــــــــــــــاک شد :گریه::لبخند:
خب از اول:

نع:لبخند:

یه گیم سرور رو راه اندازی کردم که سمت سرورش با ++c کار شده و دیتابیسش هم MYSQL و من اومدم واسه سمت کلاینت، با #C کار کردم

الان فقط مشکلم اینه که سمت سرور که میخواد پسوردا ها رو چک کنه و به سرور که وصل میشه، نمیدونم چطور پسورد هارو با چه الگوریتمی بفرسم که Read بشه........:ناراحت:

فقط اینو واسش پیدا کردم که ولی با زبون PHP هسش:


<?php
/*
** PHP implementation of the PvPGN Password Hash Algorithm.

** Copyright 2004 Aaron (aaron@pvpgn.org)

** This code is available under the GNU Lesser General Public License:
** http://www.gnu.org/licenses/lgpl.txt

** This code in general is based on:
** Copyright 2002 - 2003 Marcus Campbell
** http://www.tecknik.net/sha-1/
** Based on the JavaScript SHA-1 implementation by Paul Johnston
** http://pajhome.org.uk/

** the safe_rol function is taken from an PHP SHA-1 implementation
** written by Chris Monson (chris@bouncingchairs.net)
** Most recent version available on http://bouncingchairs.net
** (Based on the SHA algorithm as given in "Applied Cryptography")

*/
function str2blks_pvpgn($str) {
$nblk = ((strlen($str) + 8) >> 6) + 1;

for($i=0; $i < $nblk * 16; $i++) $blks[$i] = 0;
for($i=0; $i < strlen($str); $i++) {
$blks[$i >> 2] |= ord(substr($str, $i, 1)) << ( ($i % 4) * 8);
}
return $blks;
}
function safe_add($x, $y) {
$lsw = ($x & 0xFFFF) + ($y & 0xFFFF);
$msw = ($x >> 16) + ($y >> 16) + ($lsw >> 16);
return ($msw << 16) | ($lsw & 0xFFFF);
}

function safe_not( $num ) {
$lsw = (~($num & 0xFFFF)) & 0xFFFF;
$msw = (~($num >> 16)) & 0xFFFF;
return ($msw << 16) | $lsw;
}

function safe_rol( $num, $amt ) {
$leftmask = 0xffff | (0xffff << 16);
$leftmask <<= 32 - $amt;
$rightmask = 0xffff | (0xffff << 16);
$rightmask <<= $amt;
$rightmask = safe_not($rightmask);

$remains = $num & $leftmask;
$remains >>= 32 - $amt;
$remains &= $rightmask;

$res = ($num << $amt) | $remains;

return $res;
}

function ft($t, $b, $c, $d) {
if($t < 20) return ($b & $c) | ((safe_not($b)) & $d);
if($t < 40) return $d ^ $c ^ $b;
if($t < 60) return ($c & $b) | ($d & $c) | ($d & $b);
return $d ^ $c ^ $b;
}

function kt($t) {
if ($t < 20) {
return 0x5a82 << 16 | 0x7999;
} else if ($t < 40) {
return 0x6ed9 << 16 | 0xeba1;
} else if ($t < 60) {
return 0x8f1b << 16 | 0xbcdc;
} else {
return 0xca62 << 16 | 0xc1d6;
}
}
function pvpgn_hash($str) {
$x = str2blks_pvpgn($str);

$a = 0x6745 << 16 | 0x2301;
$b = 0xefcd << 16 | 0xab89;
$c = 0x98ba << 16 | 0xdcfe;
$d = 0x1032 << 16 | 0x5476;
$e = 0xc3d2 << 16 | 0xe1f0;

for($i = 0; $i < sizeof($x); $i += 16) {
$olda = $a;
$oldb = $b;
$oldc = $c;
$oldd = $d;
$olde = $e;

for($j = 0; $j < 16; $j++) {
$w[$j] = $x[$i+$j];
}

for($j = 0; $j < 64; $j++) {
$ww = $w[$j] ^ $w[$j+8] ^ $w[$j+2] ^ $w[$j+13];
$w[$j+16] = 1 << ($ww%32);
}

for($j = 0; $j < 80; $j++) {
if ($j<20)
{
$t = safe_add(safe_add(safe_rol($a, 5), ft($j, $b, $c, $d)), safe_add(safe_add($e, $w[$j]), kt($j)));
}
else
{
$t = safe_add(safe_add(safe_rol($t, 5), ft($j, $b, $c, $d)), safe_add(safe_add($e, $w[$j]), kt($j)));
}
$e = $d;
$d = $c;
$c = safe_rol($b, 30);
$b = $a;
$a = $t;
}
$a = safe_add($t, $olda);
$b = safe_add($b, $oldb);
$c = safe_add($c, $oldc);
$d = safe_add($d, $oldd);
$e = safe_add($e, $olde);
}
return sprintf("%08x%08x%08x%08x%08x",$a,$b,$c,$d,$e);
}

?>

حالا من چه رقم اینو به سی شارپ تغییر بدم ؟:افسرده::افسرده::افسرده:
:لبخند: