當前位置:首頁 » 操作系統 » sha1演算法

sha1演算法

發布時間: 2022-01-08 07:43:14

⑴ 安全哈希演算法sha1和sm3演算法的區別

sha1是一種雜湊演算法,通俗的說即對數據使用sha1演算法進行計算,得到的結果就是sha1值(校驗值),可用於數字簽名、驗簽。
sm3是國密演算法,2010年國家密碼管理局發布,也是一種雜湊演算法,功能和sha1演算法相似,但演算法實現不一樣,破解難度比sha1更大,能達到sha256的水平(sha256是比特幣的加密方式),也可用於數字簽名、驗簽。

⑵ c# SHA1演算法如何寫

首先引用這個命名空間
using System.Security.Cryptography;

//建立SHA1對象
SHA1 sha = new SHA1CryptoServiceProvider();

//將mystr轉換成byte[]
ASCIIEncoding enc = new ASCIIEncoding();
byte[] dataToHash = enc.GetBytes(mystr);

//Hash運算
byte[] dataHashed = SHA1.ComputeHash(dataToHash );

//將運算結果轉換成string
string hash = BitConverter.ToString(dataHashed).Replace("-", "");

return hash;

⑶ 伺服器證書SHA1和SHA2演算法有和區別

SHA1演算法是為了兼容部分低版本的伺服器,而在幾年前SHA1演算法逐漸淘汰,由於發展,SHA1演算法已經滿足不了安全需求,從而有更高版本SHA2替代。SHA2演算法的證書更加安全,目前能夠兼容xp sp3以上的客戶端系統。如果需要安裝SHA2演算法可以找天威誠信的技術人員進行安裝。

⑷ 急求sha1演算法的c或者c++實現

http://www.packetizer.com/security/sha1/

sha1.zip
sha1-c.zip

⑸ sha1演算法會不會導致信息不可還原

Algorithm)又叫安全哈希加密技術,是當今世界最先近的加密演算法。主要用於文件身份識別、數字簽名和口令加密等。對於明文信息A,通過SHA1演算法,生成一條160位長的識別碼B。且明文信息A和識別碼B之間同時滿足以下條件:1、對於任意兩條不同的明文信息A1、A2,其識別碼B1、B2都不相同。2、無法通過逆向演算法由識別碼B倒推出明文信息A。MOONCRM的用戶密碼採用SHA1加密存儲,即伺服器上存儲的只是由用戶密碼生成的識別碼,而用戶密碼本身並沒有存儲在伺服器上。用戶輸入登陸口令時,系統會根據輸入口令生成相應識別碼並與系統中所存儲的識別碼進行比較,如二者一致,則認為口令正確。系統中沒有存儲用戶原始的口令值,即使有人獲得口令文件,也無法破解用戶登陸密碼,確保用戶密碼絕對安全。

⑹ MD5,sha1,sha256分別輸出多少位啊

MD5輸出128位、SHA1輸出160位、SHA256輸出256位。

1、MD5消息摘要演算法(英語:MD5 Message-Digest Algorithm),一種被廣泛使用的密碼散列函數,可以產生出一個128位(16位元組)的散列值(hash value),用於確保信息傳輸完整一致。

2、SHA1安全哈希演算法(Secure Hash Algorithm)主要適用於數字簽名標准 裡面定義的數字簽名演算法。對於長度小於2^64位的消息,SHA1會產生一個160位的消息摘要。

3、sha256哈希值用作表示大量數據的固定大小的唯一值。數據的少量更改會在哈希值中產生不可預知的大量更改。SHA256 演算法的哈希值大小為 256 位。

(6)sha1演算法擴展閱讀:

MD5應用:

1、一致性驗證

MD5的典型應用是對一段信息產生信息摘要,以防止被篡改。具體來說文件的MD5值就像是這個文件的「數字指紋」。每個文件的MD5值是不同的,如果任何人對文件做了任何改動,其MD5值也就是對應的「數字指紋」就會發生變化。

比如下載伺服器針對一個文件預先提供一個MD5值,用戶下載完該文件後,用我這個演算法重新計算下載文件的MD5值,通過比較這兩個值是否相同,就能判斷下載的文件是否出錯,或者說下載的文件是否被篡改了。

2、數字簽名

MD5的典型應用是對一段Message(位元組串)產生fingerprint(指紋),以防止被「篡改」。

例子:將一段話寫在一個叫 readme.txt文件中,並對這個readme.txt產生一個MD5的值並記錄在案,然後可以傳播這個文件給,如果修改了文件中的任何內容,你對這個文件重新計算MD5時就會發現(兩個MD5值不相同)。

如果再有一個第三方的認證機構,用MD5還可以防止文件作者的「抵賴」,這就是所謂的數字簽名應用。

3、安全訪問認證

MD5還廣泛用於操作系統的登陸認證上,如Unix、各類BSD系統登錄密碼、數字簽名等諸多方面。如在Unix系統中用戶的密碼是以MD5(或其它類似的演算法)經Hash運算後存儲在文件系統中。

當用戶登錄的時候,系統把用戶輸入的密碼進行MD5 Hash運算,然後再去和保存在文件系統中的MD5值進行比較,進而確定輸入的密碼是否正確。

即使暴露源程序和演算法描述,也無法將一個MD5的值變換回原始的字元串,從數學原理上說,是因為原始的字元串有無窮多個,這有點象不存在反函數的數學函數。

⑺ 請問SHA1加密演算法也是不可逆的嗎

SHA-1與MD5都是摘要演算法,且為不可逆演算法;
應用角度來講,適用性比安全性重要,兩個演算法長度有所不同,SHA-1 160位,MD5 128位。
如果從安全形度,在計算出摘要後,對摘要進行簽名,可以增加抗抵賴、防篡改的能力,詳情請查看數字簽名的資料。

c語言 實現sha1演算法

你再知道裡面搜「sha1演算法」就有。void sha1_finish( sha1_context *ctx, uint8 digest[20] )函數就是你要的。

⑼ sha1演算法

代碼庫里有
/*
Christophe Devine
[email protected]
http://www.cr0.net:8040/code/crypto/
*/
/*
* FIPS-180-1 compliant SHA-1 implementation
*
* Copyright (C) 2001-2003 Christophe Devine
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/

#include <string.h>

#include "sha1.h"
/* uncomment the following line to run the test suite */

/* #define TEST */

#define GET_UINT32(n,b,i) \
{ \
(n) = ( (uint32) (b)[(i) ] << 24 ) \
| ( (uint32) (b)[(i) + 1] << 16 ) \
| ( (uint32) (b)[(i) + 2] << 8 ) \
| ( (uint32) (b)[(i) + 3] ); \
}

#define PUT_UINT32(n,b,i) \
{ \
(b)[(i) ] = (uint8) ( (n) >> 24 ); \
(b)[(i) + 1] = (uint8) ( (n) >> 16 ); \
(b)[(i) + 2] = (uint8) ( (n) >> 8 ); \
(b)[(i) + 3] = (uint8) ( (n) ); \
}

void sha1_starts( sha1_context *ctx )
{
ctx->total[0] = 0;
ctx->total[1] = 0;

ctx->state[0] = 0x67452301;
ctx->state[1] = 0xEFCDAB89;
ctx->state[2] = 0x98BADCFE;
ctx->state[3] = 0x10325476;
ctx->state[4] = 0xC3D2E1F0;
}

void sha1_process( sha1_context *ctx, uint8 data[64] )
{
uint32 temp, W[16], A, B, C, D, E;

GET_UINT32( W[0], data, 0 );
GET_UINT32( W[1], data, 4 );
GET_UINT32( W[2], data, 8 );
GET_UINT32( W[3], data, 12 );
GET_UINT32( W[4], data, 16 );
GET_UINT32( W[5], data, 20 );
GET_UINT32( W[6], data, 24 );
GET_UINT32( W[7], data, 28 );
GET_UINT32( W[8], data, 32 );
GET_UINT32( W[9], data, 36 );
GET_UINT32( W[10], data, 40 );
GET_UINT32( W[11], data, 44 );
GET_UINT32( W[12], data, 48 );
GET_UINT32( W[13], data, 52 );
GET_UINT32( W[14], data, 56 );
GET_UINT32( W[15], data, 60 );

#define S(x,n) ((x << n) | ((x & 0xFFFFFFFF) >> (32 - n)))

#define R(t) \
( \
temp = W[(t - 3) & 0x0F] ^ W[(t - 8) & 0x0F] ^ \
W[(t - 14) & 0x0F] ^ W[ t & 0x0F], \
( W[t & 0x0F] = S(temp,1) ) \
)

#define P(a,b,c,d,e,x) \
{ \
e += S(a,5) + F(b,c,d) + K + x; b = S(b,30); \
}

A = ctx->state[0];
B = ctx->state[1];
C = ctx->state[2];
D = ctx->state[3];
E = ctx->state[4];

#define F(x,y,z) (z ^ (x & (y ^ z)))
#define K 0x5A827999

P( A, B, C, D, E, W[0] );
P( E, A, B, C, D, W[1] );
P( D, E, A, B, C, W[2] );
P( C, D, E, A, B, W[3] );
P( B, C, D, E, A, W[4] );
P( A, B, C, D, E, W[5] );
P( E, A, B, C, D, W[6] );
P( D, E, A, B, C, W[7] );
P( C, D, E, A, B, W[8] );
P( B, C, D, E, A, W[9] );
P( A, B, C, D, E, W[10] );
P( E, A, B, C, D, W[11] );
P( D, E, A, B, C, W[12] );
P( C, D, E, A, B, W[13] );
P( B, C, D, E, A, W[14] );
P( A, B, C, D, E, W[15] );
P( E, A, B, C, D, R(16) );
P( D, E, A, B, C, R(17) );
P( C, D, E, A, B, R(18) );
P( B, C, D, E, A, R(19) );

#undef K
#undef F

#define F(x,y,z) (x ^ y ^ z)
#define K 0x6ED9EBA1

P( A, B, C, D, E, R(20) );
P( E, A, B, C, D, R(21) );
P( D, E, A, B, C, R(22) );
P( C, D, E, A, B, R(23) );
P( B, C, D, E, A, R(24) );
P( A, B, C, D, E, R(25) );
P( E, A, B, C, D, R(26) );
P( D, E, A, B, C, R(27) );
P( C, D, E, A, B, R(28) );
P( B, C, D, E, A, R(29) );
P( A, B, C, D, E, R(30) );
P( E, A, B, C, D, R(31) );
P( D, E, A, B, C, R(32) );
P( C, D, E, A, B, R(33) );
P( B, C, D, E, A, R(34) );
P( A, B, C, D, E, R(35) );
P( E, A, B, C, D, R(36) );
P( D, E, A, B, C, R(37) );
P( C, D, E, A, B, R(38) );
P( B, C, D, E, A, R(39) );

#undef K
#undef F

#define F(x,y,z) ((x & y) | (z & (x | y)))
#define K 0x8F1BBCDC

P( A, B, C, D, E, R(40) );
P( E, A, B, C, D, R(41) );
P( D, E, A, B, C, R(42) );
P( C, D, E, A, B, R(43) );
P( B, C, D, E, A, R(44) );
P( A, B, C, D, E, R(45) );
P( E, A, B, C, D, R(46) );
P( D, E, A, B, C, R(47) );
P( C, D, E, A, B, R(48) );
P( B, C, D, E, A, R(49) );
P( A, B, C, D, E, R(50) );
P( E, A, B, C, D, R(51) );
P( D, E, A, B, C, R(52) );
P( C, D, E, A, B, R(53) );
P( B, C, D, E, A, R(54) );
P( A, B, C, D, E, R(55) );
P( E, A, B, C, D, R(56) );
P( D, E, A, B, C, R(57) );
P( C, D, E, A, B, R(58) );
P( B, C, D, E, A, R(59) );

#undef K
#undef F

#define F(x,y,z) (x ^ y ^ z)
#define K 0xCA62C1D6

P( A, B, C, D, E, R(60) );
P( E, A, B, C, D, R(61) );
P( D, E, A, B, C, R(62) );
P( C, D, E, A, B, R(63) );
P( B, C, D, E, A, R(64) );
P( A, B, C, D, E, R(65) );
P( E, A, B, C, D, R(66) );
P( D, E, A, B, C, R(67) );
P( C, D, E, A, B, R(68) );
P( B, C, D, E, A, R(69) );
P( A, B, C, D, E, R(70) );
P( E, A, B, C, D, R(71) );
P( D, E, A, B, C, R(72) );
P( C, D, E, A, B, R(73) );
P( B, C, D, E, A, R(74) );
P( A, B, C, D, E, R(75) );
P( E, A, B, C, D, R(76) );
P( D, E, A, B, C, R(77) );
P( C, D, E, A, B, R(78) );
P( B, C, D, E, A, R(79) );

#undef K
#undef F

ctx->state[0] += A;
ctx->state[1] += B;
ctx->state[2] += C;
ctx->state[3] += D;
ctx->state[4] += E;
}

void sha1_update( sha1_context *ctx, uint8 *input, uint32 length )
{
uint32 left, fill;

if( ! length ) return;

left = ctx->total[0] & 0x3F;
fill = 64 - left;

ctx->total[0] += length;
ctx->total[0] &= 0xFFFFFFFF;

if( ctx->total[0] < length )
ctx->total[1]++;

if( left && length >= fill )
{
memcpy( (void *) (ctx->buffer + left),
(void *) input, fill );
sha1_process( ctx, ctx->buffer );
length -= fill;
input += fill;
left = 0;
}

while( length >= 64 )
{
sha1_process( ctx, input );
length -= 64;
input += 64;
}

if( length )
{
memcpy( (void *) (ctx->buffer + left),
(void *) input, length );
}
}

static uint8 sha1_padding[64] =
{
0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
};

void sha1_finish( sha1_context *ctx, uint8 digest[20] )
{
uint32 last, padn;
uint32 high, low;
uint8 msglen[8];

high = ( ctx->total[0] >> 29 )
| ( ctx->total[1] << 3 );
low = ( ctx->total[0] << 3 );

PUT_UINT32( high, msglen, 0 );
PUT_UINT32( low, msglen, 4 );

last = ctx->total[0] & 0x3F;
padn = ( last < 56 ) ? ( 56 - last ) : ( 120 - last );

sha1_update( ctx, sha1_padding, padn );
sha1_update( ctx, msglen, 8 );

PUT_UINT32( ctx->state[0], digest, 0 );
PUT_UINT32( ctx->state[1], digest, 4 );
PUT_UINT32( ctx->state[2], digest, 8 );
PUT_UINT32( ctx->state[3], digest, 12 );
PUT_UINT32( ctx->state[4], digest, 16 );
}

#ifdef TEST

#include <stdlib.h>
#include <stdio.h>

/*
* those are the standard FIPS-180-1 test vectors
*/

static char *msg[] =
{
"abc",
"",
NULL
};

static char *val[] =
{
"",
"",
""
};

int main( int argc, char *argv[] )
{
FILE *f;
int i, j;
char output[41];
sha1_context ctx;
unsigned char buf[1000];
unsigned char sha1sum[20];

if( argc < 2 )
{
printf( "\n SHA-1 Validation Tests:\n\n" );

for( i = 0; i < 3; i++ )
{
printf( " Test %d ", i + 1 );

sha1_starts( &ctx );

if( i < 2 )
{
sha1_update( &ctx, (uint8 *) msg,
strlen( msg ) );
}
else
{
memset( buf, 'a', 1000 );

for( j = 0; j < 1000; j++ )
{
sha1_update( &ctx, (uint8 *) buf, 1000 );
}
}

sha1_finish( &ctx, sha1sum );

for( j = 0; j < 20; j++ )
{
sprintf( output + j * 2, "%02x", sha1sum[j] );
}

if( memcmp( output, val, 40 ) )
{
printf( "failed!\n" );
return( 1 );
}

printf( "passed.\n" );
}

printf( "\n" );
}
else
{
if( ! ( f = fopen( argv[1], "rb" ) ) )
{
perror( "fopen" );
return( 1 );
}

sha1_starts( &ctx );

while( ( i = fread( buf, 1, sizeof( buf ), f ) ) > 0 )
{
sha1_update( &ctx, buf, i );
}

sha1_finish( &ctx, sha1sum );

for( j = 0; j < 20; j++ )
{
printf( "%02x", sha1sum[j] );
}

printf( " %s\n", argv[1] );
}

return( 0 );
}

#endif

/*
Christophe Devine
[email protected]
http://www.cr0.net:8040/code/crypto/
*/
#ifndef _SHA1_H
#define _SHA1_H

#ifndef uint8
#define uint8 unsigned char
#endif

#ifndef uint32
#define uint32 unsigned long int
#endif

typedef struct
{
uint32 total[2];
uint32 state[5];
uint8 buffer[64];
}
sha1_context;

void sha1_starts( sha1_context *ctx );
void sha1_update( sha1_context *ctx, uint8 *input, uint32 length );
void sha1_finish( sha1_context *ctx, uint8 digest[20] );

#endif /* sha1.h */

⑽ C# SHA1演算法

32位無符號整數類型常量,0x5A827999這個是16進制數,具體是什麼用那就不知道,要看在什麼地方用了。

熱點內容
SQL寫序列 發布:2024-09-20 06:02:29 瀏覽:964
裝緩存下載 發布:2024-09-20 05:42:36 瀏覽:72
gon引擎自動回收腳本 發布:2024-09-20 05:39:39 瀏覽:246
好醫生連鎖店密碼多少 發布:2024-09-20 05:09:38 瀏覽:15
魔獸腳本代理 發布:2024-09-20 05:09:35 瀏覽:99
python登陸網頁 發布:2024-09-20 05:08:39 瀏覽:758
安卓qq飛車如何轉蘋果 發布:2024-09-20 04:54:30 瀏覽:178
存儲過程中in什麼意思 發布:2024-09-20 04:24:20 瀏覽:315
php顯示數據 發布:2024-09-20 03:48:38 瀏覽:501
源碼安裝軟體 發布:2024-09-20 03:44:31 瀏覽:354