<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.multitheftauto.com/wiki/PT-BR/passwordHash?action=history&amp;feed=atom</id>
	<title>PT-BR/passwordHash - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.multitheftauto.com/wiki/PT-BR/passwordHash?action=history&amp;feed=atom"/>
	<link rel="alternate" type="text/html" href="https://wiki.multitheftauto.com/index.php?title=PT-BR/passwordHash&amp;action=history"/>
	<updated>2026-04-05T19:14:48Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.39.3</generator>
	<entry>
		<id>https://wiki.multitheftauto.com/index.php?title=PT-BR/passwordHash&amp;diff=74670&amp;oldid=prev</id>
		<title>Lettify: Created page with &quot;__NOTOC__ {{BR/Funcao compartilhada}} {{BR/Nota|Using '''passwordHash''' é o meio recomendado para guardar senhas.}} {{PT-BR/New feature/item|3.0154|1.5.4|11277| Esta função cria um hash a partir de uma senha especificada (basicamente, a senha criptografada) usando um algorítmo específico de hashing. }}  {{BR/Warning|É altamente recomendado usar a versão assíncrona desta função (especificando a função callback). Por outro lado, você pode sofrer algumas trava...&quot;</title>
		<link rel="alternate" type="text/html" href="https://wiki.multitheftauto.com/index.php?title=PT-BR/passwordHash&amp;diff=74670&amp;oldid=prev"/>
		<updated>2022-05-21T20:29:40Z</updated>

		<summary type="html">&lt;p&gt;Created page with &amp;quot;__NOTOC__ {{BR/Funcao compartilhada}} {{BR/Nota|Using &amp;#039;&amp;#039;&amp;#039;passwordHash&amp;#039;&amp;#039;&amp;#039; é o meio recomendado para guardar senhas.}} {{PT-BR/New feature/item|3.0154|1.5.4|11277| Esta função cria um hash a partir de uma senha especificada (basicamente, a senha criptografada) usando um algorítmo específico de hashing. }}  {{BR/Warning|É altamente recomendado usar a versão assíncrona desta função (especificando a função callback). Por outro lado, você pode sofrer algumas trava...&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;__NOTOC__&lt;br /&gt;
{{BR/Funcao compartilhada}}&lt;br /&gt;
{{BR/Nota|Using '''passwordHash''' é o meio recomendado para guardar senhas.}}&lt;br /&gt;
{{PT-BR/New feature/item|3.0154|1.5.4|11277|&lt;br /&gt;
Esta função cria um hash a partir de uma senha especificada (basicamente, a senha criptografada) usando um algorítmo específico de hashing.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{BR/Warning|É altamente recomendado usar a versão assíncrona desta função (especificando a função callback). Por outro lado, você pode sofrer algumas travadas devido à lentidão do algoritmo bcrypt.}}&lt;br /&gt;
&lt;br /&gt;
==Sintaxe== &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
string passwordHash ( string password, string algorithm, table options [, function callback ] )  &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt; &lt;br /&gt;
&lt;br /&gt;
===Argumentos necessários=== &lt;br /&gt;
*'''password:''' A senha para criptografar.&lt;br /&gt;
*'''algorithm:''' O algoritmo para usar:&lt;br /&gt;
** ''bcrypt'': usa o algoritmo de criptografia bcrypt. Tamanho do hash: 60 caracteres. &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Note que apenas o prefixo ''$2y$'' é suportado (prefixos antigos podem causar problemas de segurança).&amp;lt;/span&amp;gt;&lt;br /&gt;
*'''options:''' tabela com opções para o algoritmo de criptografia, detalhados abaixo.&lt;br /&gt;
&lt;br /&gt;
===Argumentos opcionais===&lt;br /&gt;
{{PT-BR/New feature/item|3.0154|1.5.4|11281|&lt;br /&gt;
*'''callback:''' especificando uma função callback vai fazer com que esta função funcione de forma assíncrona, os parâmetros da função callback são o mesmo dos valores retornados abaixo.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===Opções para cada algoritmo de criptografia===&lt;br /&gt;
* ''bcrypt'':&lt;br /&gt;
** ''cost'' ([[PT-BR/Int|int]]), padrão: 10. Veja [http://security.stackexchange.com/questions/17207/recommended-of-rounds-for-bcrypt este link] para determinar o número de voltas apropriadas para seu servidor.&lt;br /&gt;
** ''salt'' ([[PT-BR/String|string]]), Padrão: string vazia &amp;lt;code&amp;gt;&amp;quot;&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
*** uma string vazia vai automaticamente gerar um salt com o ''cost'' especificado&lt;br /&gt;
*** '''obsoleto''': se uma string é especificada, isso vai ser usado como um salt. ('''NÃO FAÇA ISSO!''')&lt;br /&gt;
*** a string especificada deve ser igual ou maior que 22 caracteres&lt;br /&gt;
&lt;br /&gt;
===Retorna===&lt;br /&gt;
Retorna a senha criptografada como [[PT-BR/String|string]], ''false'' caso contrário. Se uma função callback é especificada, os valores mencionados acima viram os parâmetros do callback, e esta função vai sempre retornar ''true''.&lt;br /&gt;
&lt;br /&gt;
==Exemplo==&lt;br /&gt;
{{BR/Warning|Se você vai usar o &amp;quot;Exemplo 1&amp;quot; então você vai ter que salvar em 'account data' na chave &amp;quot;hash_password&amp;quot; depois que o servidor reiniciar, senão o script não vai mais funcionar.}}&lt;br /&gt;
&lt;br /&gt;
Este exemplo faz uso do [[PT-BR/passwordHash|passwordHash]] e do [[PT-BR/passwordVerify|passwordVerify]] na criação e no login de conta para aumentar a segurança.&lt;br /&gt;
&amp;lt;section name=&amp;quot;Examplo 1&amp;quot; class=&amp;quot;server&amp;quot; show=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
* Use '''/accountCreate [username] [password]''' para criar uma conta.&lt;br /&gt;
* Use '''/accountLogin [username] [password]''' para logar em uma conta.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
-- vamos criar um command handler que vai nos permitir criar uma conta.&lt;br /&gt;
addCommandHandler(&amp;quot;accountCreate&amp;quot;,function(source,cmd,username,password)&lt;br /&gt;
	if (username and password) then&lt;br /&gt;
		local hashedPassword = passwordHash(password,&amp;quot;bcrypt&amp;quot;,{}) -- cria um novo hash da senha&lt;br /&gt;
		if (hashedPassword) then -- verificamos se o hash foi gerado&lt;br /&gt;
			local account = addAccount(username,hashedPassword) -- agora vamos criar a conta com a senha que especificamos (só que criptografada)&lt;br /&gt;
			if (account) then&lt;br /&gt;
				setAccountData(account,&amp;quot;hash_password&amp;quot;,hashedPassword) -- salva a senha criptografada desta conta para podermos verificar isso depois, se necessário.&lt;br /&gt;
				outputChatBox(&amp;quot;Account successfuly created! Now please login. Syntax &amp;lt;/accountLogin [username] [password]&amp;gt;&amp;quot;,source,20,160,20)&lt;br /&gt;
			else&lt;br /&gt;
				outputChatBox(&amp;quot;Account already exists! Please try again with different username.&amp;quot;,source,20,160,20)&lt;br /&gt;
			end&lt;br /&gt;
		else&lt;br /&gt;
			outputChatBox(&amp;quot;Securing your password failed! Please try again or contact an administrator.&amp;quot;,source,160,20,20)&lt;br /&gt;
		end&lt;br /&gt;
	else&lt;br /&gt;
		outputChatBox(&amp;quot;Wrong parameters! Correct Syntax &amp;lt;/accountCreate [username] [password]&amp;gt;&amp;quot;,source,160,20,20)&lt;br /&gt;
	end&lt;br /&gt;
end);&lt;br /&gt;
&lt;br /&gt;
-- vamos criar um command handler que vai nos permitir logar em uma conta&lt;br /&gt;
addCommandHandler(&amp;quot;accountLogin&amp;quot;,function(source,cmd,username,password)&lt;br /&gt;
	if (username and password) then&lt;br /&gt;
		local account = getAccount(username) -- obtemos a conta pelo nome&lt;br /&gt;
		if (account) then -- checamos se a conta especificada existe&lt;br /&gt;
			local hashedPassword = getAccountData(account,&amp;quot;hash_password&amp;quot;) -- obtemos a senha (criptografada) desta conta&lt;br /&gt;
			if (passwordVerify(password,hashedPassword)) then -- verifico se a senha especificada é igual a senha criptografada&lt;br /&gt;
				if logIn(source,account,hashedPassword) then -- agora logamos o jogador em sua conta&lt;br /&gt;
					outputChatBox(&amp;quot;Login successfull. Welcome, &amp;quot;..getAccountName(account)..&amp;quot;!&amp;quot;,source,20,160,20)&lt;br /&gt;
				end&lt;br /&gt;
			else&lt;br /&gt;
				outputChatBox(&amp;quot;Password is incorrect!&amp;quot;,source,160,20,20)&lt;br /&gt;
			end&lt;br /&gt;
		else&lt;br /&gt;
			outputChatBox(&amp;quot;Account doesn't exist! Please try again with different account.&amp;quot;,source,160,20,20)&lt;br /&gt;
		end&lt;br /&gt;
	else&lt;br /&gt;
		outputChatBox(&amp;quot;Wrong parameters! Correct Syntax &amp;lt;/accountLogin [username] [password]&amp;gt;&amp;quot;,source,160,20,20)&lt;br /&gt;
	end&lt;br /&gt;
end);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/section&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Veja também==&lt;br /&gt;
{{Utility functions}}&lt;/div&gt;</summary>
		<author><name>Lettify</name></author>
	</entry>
</feed>