2015-02-21 2 views
0

Я использовал это для хеширования своих паролей, но у меня такое чувство, что оно не очень безопасно. Я искал поиски, чтобы узнать, расшифровал ли кто-нибудь строку, используя это. Это алгоритм шифрования, я не уверен, как перейти к реверсированию математики вместо дешифрования хэшей. Любая помощь будет приветствоваться. Это шифр в C++.C++: Обратный этот хэш?

EDIT: Я планирую перейти к более безопасному методу хэширования паролей, однако для этого мне нужно отменить математику, чтобы преобразовать ее в обычный текст, прежде чем преобразовать в новую хэшированную строку SHA256. Люди, кажется, не понимают меня здесь, я понимаю, что это небезопасно, это просто показывает алгоритм в C++. Это на самом деле для другого языка. Я ограничена тем, что могу сделать и как я это делаю на этом языке.

#include <iostream> 
#include <string.h> 
using namespace std; 



int main() 
{ 
    char hasher[256]; 
    cout<< "Input a string!"<<endl; 
    cin>> hasher; 
    cout << endl; 


for(int x=0; x < strlen(hasher); x++) 
    { 
     hasher[x] += (3^x) * (x % 15); 
     if(hasher[x] > (255)) 
     { 
      hasher[x] -= 256; 
     } 
    } 

    cout << hasher << endl; 
    system("pause"); 
    return 1; 
} 
+3

Это не хэш. –

+0

Его зашифрованная строка. Сожалею. – amal

+2

Имеет ли ваш тип 'char' более 8 бит? В противном случае 'hasher [x]> (255)' никогда не будет истинным. –

ответ

0

Вы добавляете номер персонажа, основанный на позиции. Просто вычтите это число 3^x и т. Д.

+0

Спасибо. Это действительно неуверенно. Я полагал, что это не будет слишком сложно сделать, но я не был уверен, как изменить математику. – amal

2

Вы изменяете каждый символ, only based on its relative position in the string. Это крайне слабый способ продолжения. Он не будет сопротивляться plain text attack (если вы знаете, два пароля и его кодировку):

password -> pcusôìÉÇ 
abaaa  -> adca} 

Таким образом, злоумышленник сразу же заметят, что первый и четвертый символ остается неизменным, а вторые и третьи смены по 2 письма , В среднем 8 букв пароль, половина из них будет сломана. И, к сожалению, многие пароли можно угадать с первых четырех букв!

На самом деле вам будет легко найти другие смены 0,2,2,0,28, 30,30,28,88,80,90, .... (менее впечатляющие, чем ваши формула, не так ли?).

Вы ввели ваших пользователей, которые действительно рискуют здесь. Лучше перейдите к стандартной хэш-функции such as sha512 и сохраните только хеш в базе данных. Это означает, что невозможно найти пароль (отсутствующая информация). Но вы можете проверить, правильно ли введенный пользователем пароль, вычисляя хэш его ввода и сравнивая его с хэшем в базе данных (см. "article Safely storing user passwords").

+1

Я планирую перейти на более безопасный метод хеширования паролей, однако для этого мне нужно отменить математику, чтобы преобразовать ее в обычный текст, прежде чем я перехожу к новой хэшированной строке SHA256. Люди, кажется, не понимают меня здесь, я понимаю, что это небезопасно, это просто показывает алгоритм в C++. Это на самом деле для другого языка. Я ограничена тем, что могу сделать и как я это делаю на этом языке. – amal

+0

@ArtjomB. вы правы. Чтобы иметь 0 с ascii-паролем, в качестве пароля потребуется «L» в качестве 13-й буквы. Я отреагировал на мой ответ. – Christophe

Смежные вопросы