亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? gost.c

?? gost前蘇聯(lián)加密標(biāo)準(zhǔn),前蘇聯(lián)(現(xiàn)在的俄羅斯)的一中加密解密的源代碼。
?? C
字號(hào):
/* * The GOST 28147-89 cipher * * This is based on the 25 Movember 1993 draft translation * by Aleksandr Malchik, with Whitfield Diffie, of the Government * Standard of the U.S.S.R. GOST 28149-89, "Cryptographic Transformation * Algorithm", effective 1 July 1990.  (Whitfield.Diffie@eng.sun.com) * * That is a draft, and may contain errors, which will be faithfully * reflected here, along with possible exciting new bugs. * * Some details have been cleared up by the paper "Soviet Encryption * Algorithm" by Josef Pieprzyk and Leonid Tombak of the University * of Wollongong, New South Wales.  (josef/leo@cs.adfa.oz.au) * * The standard is written by A. Zabotin (project leader), G.P. Glazkov, * and V.B. Isaeva.  It was accepted and introduced into use by the * action of the State Standards Committee of the USSR on 2 June 89 as * No. 1409.  It was to be reviewed in 1993, but whether anyone wishes * to take on this obligation from the USSR is questionable. * * This code is placed in the public domain. *//* * If you read the standard, it belabors the point of copying corresponding * bits from point A to point B quite a bit.  It helps to understand that * the standard is uniformly little-endian, although it numbers bits from * 1 rather than 0, so bit n has value 2^(n-1).  The least significant bit * of the 32-bit words that are manipulated in the algorithm is the first, * lowest-numbered, in the bit string. *//* A 32-bit data type */#ifdef __alpha  /* Any other 64-bit machines? */typedef unsigned int word32;#elsetypedef unsigned long word32;#endif/* * The standard does not specify the contents of the 8 4 bit->4 bit * substitution boxes, saying they're a parameter of the network * being set up.  For illustration purposes here, I have used * the first rows of the 8 S-boxes from the DES.  (Note that the * DES S-boxes are numbered starting from 1 at the msb.  In keeping * with the rest of the GOST, I have used little-endian numbering. * Thus, k8 is S-box 1. * * Obviously, a careful look at the cryptographic properties of the cipher * must be undertaken before "production" substitution boxes are defined. * * The standard also does not specify a standard bit-string representation * for the contents of these blocks. */static unsigned char const k8[16] = {	14,  4, 13,  1,  2, 15, 11,  8,  3, 10,  6, 12,  5,  9,  0,  7 }; static unsigned char const k7[16] = {	15,  1,  8, 14,  6, 11,  3,  4,  9,  7,  2, 13, 12,  0,  5, 10 };static unsigned char const k6[16] = {	10,  0,  9, 14,  6,  3, 15,  5,  1, 13, 12,  7, 11,  4,  2,  8 };static unsigned char const k5[16] = {	 7, 13, 14,  3,  0,  6,  9, 10,  1,  2,  8,  5, 11, 12,  4, 15 };static unsigned char const k4[16] = {	 2, 12,  4,  1,  7, 10, 11,  6,  8,  5,  3, 15, 13,  0, 14,  9 };static unsigned char const k3[16] = {	12,  1, 10, 15,  9,  2,  6,  8,  0, 13,  3,  4, 14,  7,  5, 11 };static unsigned char const k2[16] = {	 4, 11,  2, 14, 15,  0,  8, 13,  3, 12,  9,  7,  5, 10,  6,  1 };static unsigned char const k1[16] = {	13,  2,  8,  4,  6, 15, 11,  1, 10,  9,  3, 14,  5,  0, 12,  7 };/* Byte-at-a-time substitution boxes */static unsigned char k87[256];static unsigned char k65[256];static unsigned char k43[256];static unsigned char k21[256];/* * Build byte-at-a-time subtitution tables. * This must be called once for global setup. */voidkboxinit(void){	int i;	for (i = 0; i < 256; i++) {		k87[i] = k8[i >> 4] << 4 | k7[i & 15];		k65[i] = k6[i >> 4] << 4 | k5[i & 15];		k43[i] = k4[i >> 4] << 4 | k3[i & 15];		k21[i] = k2[i >> 4] << 4 | k1[i & 15];	}}/* * Do the substitution and rotation that are the core of the operation, * like the expansion, substitution and permutation of the DES. * It would be possible to perform DES-like optimisations and store * the table entries as 32-bit words, already rotated, but the * efficiency gain is questionable. * * This should be inlined for maximum speed */#if __GNUC____inline__#endifstatic word32f(word32 x){	/* Do substitutions */#if 0	/* This is annoyingly slow */	x = k8[x>>28 & 15] << 28 | k7[x>>24 & 15] << 24 |	    k6[x>>20 & 15] << 20 | k5[x>>16 & 15] << 16 |	    k4[x>>12 & 15] << 12 | k3[x>> 8 & 15] <<  8 |	    k2[x>> 4 & 15] <<  4 | k1[x     & 15];#else	/* This is faster */	x = k87[x>>24 & 255] << 24 | k65[x>>16 & 255] << 16 |	    k43[x>> 8 & 255] <<  8 | k21[x & 255];#endif	/* Rotate left 11 bits */	return x<<11 | x>>(32-11);}/* * The GOST standard defines the input in terms of bits 1..64, with * bit 1 being the lsb of in[0] and bit 64 being the msb of in[1]. * * The keys are defined similarly, with bit 256 being the msb of key[7]. */voidgostcrypt(word32 const in[2], word32 out[2], word32 const key[8]){	register word32 n1, n2; /* As named in the GOST */	n1 = in[0];	n2 = in[1];	/* Instead of swapping halves, swap names each round */	n2 ^= f(n1+key[0]);	n1 ^= f(n2+key[1]);	n2 ^= f(n1+key[2]);	n1 ^= f(n2+key[3]);	n2 ^= f(n1+key[4]);	n1 ^= f(n2+key[5]);	n2 ^= f(n1+key[6]);	n1 ^= f(n2+key[7]);	n2 ^= f(n1+key[0]);	n1 ^= f(n2+key[1]);	n2 ^= f(n1+key[2]);	n1 ^= f(n2+key[3]);	n2 ^= f(n1+key[4]);	n1 ^= f(n2+key[5]);	n2 ^= f(n1+key[6]);	n1 ^= f(n2+key[7]);	n2 ^= f(n1+key[0]);	n1 ^= f(n2+key[1]);	n2 ^= f(n1+key[2]);	n1 ^= f(n2+key[3]);	n2 ^= f(n1+key[4]);	n1 ^= f(n2+key[5]);	n2 ^= f(n1+key[6]);	n1 ^= f(n2+key[7]);	n2 ^= f(n1+key[7]);	n1 ^= f(n2+key[6]);	n2 ^= f(n1+key[5]);	n1 ^= f(n2+key[4]);	n2 ^= f(n1+key[3]);	n1 ^= f(n2+key[2]);	n2 ^= f(n1+key[1]);	n1 ^= f(n2+key[0]);	/* There is no swap after the last round */	out[0] = n2;	out[1] = n1;}	/* * The key schedule is somewhat different for decryption. * (The key table is used once forward and three times backward.) * You could define an expanded key, or just write the code twice, * as done here. */voidgostdecrypt(word32 const in[2], word32 out[2], word32 const key[8]){	register word32 n1, n2; /* As named in the GOST */	n1 = in[0];	n2 = in[1];	n2 ^= f(n1+key[0]);	n1 ^= f(n2+key[1]);	n2 ^= f(n1+key[2]);	n1 ^= f(n2+key[3]);	n2 ^= f(n1+key[4]);	n1 ^= f(n2+key[5]);	n2 ^= f(n1+key[6]);	n1 ^= f(n2+key[7]);	n2 ^= f(n1+key[7]);	n1 ^= f(n2+key[6]);	n2 ^= f(n1+key[5]);	n1 ^= f(n2+key[4]);	n2 ^= f(n1+key[3]);	n1 ^= f(n2+key[2]);	n2 ^= f(n1+key[1]);	n1 ^= f(n2+key[0]);	n2 ^= f(n1+key[7]);	n1 ^= f(n2+key[6]);	n2 ^= f(n1+key[5]);	n1 ^= f(n2+key[4]);	n2 ^= f(n1+key[3]);	n1 ^= f(n2+key[2]);	n2 ^= f(n1+key[1]);	n1 ^= f(n2+key[0]);	n2 ^= f(n1+key[7]);	n1 ^= f(n2+key[6]);	n2 ^= f(n1+key[5]);	n1 ^= f(n2+key[4]);	n2 ^= f(n1+key[3]);	n1 ^= f(n2+key[2]);	n2 ^= f(n1+key[1]);	n1 ^= f(n2+key[0]);	out[0] = n2;	out[1] = n1;}/* * The GOST "Output feedback" standard.  It seems closer morally * to the counter feedback mode some people have proposed for DES. * The avoidance of the short cycles that are possible in OFB seems * like a Good Thing. * * Calling it the stream mode makes more sense. * * The IV is encrypted with the key to produce the initial counter value. * Then, for each output block, a constant is added, modulo 2^32-1 * (0 is represented as all-ones, not all-zeros), to each half of * the counter, and the counter is encrypted to produce the value * to XOR with the output. * * Len is the number of blocks.  Sub-block encryption is * left as an exercise for the user.  Remember that the * standard defines everything in a little-endian manner, * so you want to use the low bit of gamma[0] first. * * OFB is, of course, self-inverse, so there is only one function. *//* The constants for addition */#define C1 0x01010104#define C2 0x01010101voidgostofb(word32 const *in, word32 *out, int len,	word32 const iv[2], word32 const key[8]){	word32 temp[2];         /* Counter */	word32 gamma[2];        /* Output XOR value */	/* Compute starting value for counter */	gostcrypt(iv, temp, key);	while (len--) {		temp[0] += C2;		if (temp[0] < C2)       /* Wrap modulo 2^32? */			temp[0]++;      /* Make it modulo 2^32-1 */		temp[1] += C1;		if (temp[1] < C1)       /* Wrap modulo 2^32? */			temp[1]++;      /* Make it modulo 2^32-1 */		gostcrypt(temp, gamma, key);		*out++ = *in++ ^ gamma[0];		*out++ = *in++ ^ gamma[1];	}}/* * The CFB mode is just what you'd expect.  Each block of ciphertext y[] is * derived from the input x[] by the following pseudocode: * y[i] = x[i] ^ gostcrypt(y[i-1]) * x[i] = y[i] ^ gostcrypt(y[i-1]) * Where y[-1] is the IV. * * The IV is modified in place.  Again, len is in *blocks*. */voidgostcfbencrypt(word32 const *in, word32 *out, int len,	       word32 iv[2], word32 const key[8]){	while (len--) {		gostcrypt(iv, iv, key);		iv[0] = *out++ ^= iv[0];		iv[1] = *out++ ^= iv[1];	}}voidgostcfbdecrypt(word32 const *in, word32 *out, int len,	       word32 iv[2], word32 const key[8]){	word32 t;	while (len--) {		gostcrypt(iv, iv, key);		t = *out;		*out++ ^= iv[0];		iv[0] = t;		t = *out;		*out++ ^= iv[1];		iv[1] = t;	}}/* * The message suthetication code uses only 16 of the 32 rounds. * There *is* a swap after the 16th round. * The last block should be padded to 64 bits with zeros. * len is the number of *blocks* in the input. */voidgostmac(word32 const *in, int len, word32 out[2], word32 const key[8]){	register word32 n1, n2; /* As named in the GOST */	n1 = 0;	n2 = 0;	while (len--) {		n1 ^= *in++;		n2 = *in++;		/* Instead of swapping halves, swap names each round */		n2 ^= f(n1+key[0]);		n1 ^= f(n2+key[1]);		n2 ^= f(n1+key[2]);		n1 ^= f(n2+key[3]);		n2 ^= f(n1+key[4]);		n1 ^= f(n2+key[5]);		n2 ^= f(n1+key[6]);		n1 ^= f(n2+key[7]);		n2 ^= f(n1+key[0]);		n1 ^= f(n2+key[1]);		n2 ^= f(n1+key[2]);		n1 ^= f(n2+key[3]);		n2 ^= f(n1+key[4]);		n1 ^= f(n2+key[5]);		n2 ^= f(n1+key[6]);		n1 ^= f(n2+key[7]);	}	out[0] = n1;	out[1] = n2;}#ifdef TEST#include <stdio.h>#include <stdlib.h>/* Designed to cope with 15-bit rand() implementations */#define RAND32 ((word32)rand() << 17 ^ (word32)rand() << 9 ^ rand())intmain(void){	word32 key[8];	word32 plain[2];	word32 cipher[2];	int i, j;	kboxinit();	printf("GOST 21847-89 test driver.\n");	for (i = 0; i < 1000; i++) {		for (j = 0; j < 8; j++)			key[j] = RAND32;		plain[0] = RAND32;		plain[1] = RAND32;		printf("%3d\r", i);		fflush(stdout);		gostcrypt(plain, cipher, key);		for (j = 0; j < 99; j++)			gostcrypt(cipher, cipher, key);		for (j = 0; j < 100; j++)			gostdecrypt(cipher, cipher, key);		if (plain[0] != cipher[0] || plain[1] != cipher[1]) {			fprintf(stderr, "\nError! i = %d\n", i);			return 1;		}	}	printf("All tests passed.\n");	return 0;}#endif /* TEST */

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产福利91精品| 成人综合婷婷国产精品久久免费| 26uuu成人网一区二区三区| 97精品电影院| 国产精品888| 天天色天天操综合| 亚洲人妖av一区二区| 久久免费精品国产久精品久久久久| 色呦呦国产精品| www.视频一区| 国产精品亚洲第一区在线暖暖韩国| 亚洲成人av免费| 亚洲三级小视频| 国产喷白浆一区二区三区| 欧美一区二区精品| 欧美午夜免费电影| 99国产麻豆精品| 粉嫩aⅴ一区二区三区四区| 免费在线成人网| 丝袜诱惑亚洲看片| 亚洲影视资源网| 亚洲乱码国产乱码精品精小说| 久久精品免费在线观看| 精品欧美一区二区久久 | 欧美一卡二卡三卡四卡| 欧洲中文字幕精品| 色哟哟在线观看一区二区三区| 福利91精品一区二区三区| 黄色小说综合网站| 麻豆国产精品一区二区三区| 婷婷开心久久网| 午夜久久电影网| 天堂蜜桃91精品| 亚洲成va人在线观看| 亚洲国产另类精品专区| 亚洲精品成人天堂一二三| 国产精品白丝在线| 国产精品卡一卡二卡三| 国产精品久久久久久户外露出 | 精品毛片乱码1区2区3区| 欧美一个色资源| 日韩欧美www| 欧美mv日韩mv亚洲| 国产亚洲欧美一区在线观看| 久久久久9999亚洲精品| 国产精品视频观看| 日韩毛片一二三区| 一个色在线综合| 亚洲va天堂va国产va久| 日本中文一区二区三区| 麻豆国产精品777777在线| 精品一区二区综合| 国产99久久久精品| 99国产一区二区三精品乱码| 在线区一区二视频| 欧美一区二区人人喊爽| 久久免费看少妇高潮| 国产精品久久久久久福利一牛影视 | 91精品在线免费| 欧美大片在线观看一区| 久久久久久久电影| 午夜久久福利影院| 色老综合老女人久久久| 国产一区在线不卡| 色诱视频网站一区| 欧美日韩国产三级| 日韩亚洲欧美成人一区| 国产亚洲一区二区三区在线观看| 亚洲国产成人午夜在线一区| 亚洲三级小视频| 日韩av电影天堂| 懂色一区二区三区免费观看| 色综合久久久久网| 欧美一三区三区四区免费在线看| 亚洲精品一区二区精华| 中文字幕一区二区三中文字幕| 亚洲一二三区在线观看| 国产专区综合网| 在线视频一区二区三| 欧美成人女星排名| 亚洲精品视频一区| 狠狠色伊人亚洲综合成人| 波多野结衣91| 日韩精品一区二区三区三区免费 | 亚洲精选视频免费看| 看电视剧不卡顿的网站| 国产资源在线一区| 91浏览器在线视频| 7777精品伊人久久久大香线蕉完整版| 久久先锋资源网| 亚洲影视资源网| 成人网在线免费视频| 91麻豆精品国产综合久久久久久| 国产精品污污网站在线观看| 五月天丁香久久| 99久久久精品| 久久久一区二区| 日本不卡在线视频| 色综合久久久久综合体桃花网| 欧美大片免费久久精品三p| 亚洲欧美综合另类在线卡通| 久久99国产精品麻豆| 欧美色图免费看| 亚洲欧洲av在线| 国产高清不卡一区二区| 欧美一区二区三区免费观看视频| 亚洲人成7777| 成人午夜免费视频| 精品国产伦一区二区三区观看体验 | 懂色av一区二区三区免费看| 日韩视频在线永久播放| 一个色综合av| 97超碰欧美中文字幕| 国产三级精品视频| 久久精品久久久精品美女| 欧美三级日韩三级| 亚洲激情图片一区| 99久久婷婷国产综合精品电影 | 欧美优质美女网站| 亚洲少妇中出一区| 北条麻妃一区二区三区| 国产三级精品三级在线专区| 久久成人av少妇免费| 91精品在线观看入口| 午夜精品久久久久久久99水蜜桃| 欧美麻豆精品久久久久久| 午夜在线电影亚洲一区| 91麻豆精品在线观看| 日韩欧美电影一区| 日韩精品乱码av一区二区| 欧亚洲嫩模精品一区三区| 亚洲人成精品久久久久久| 99这里只有精品| 国产精品久久久久aaaa| 成人听书哪个软件好| 国产精品久久久久影院| 成人黄色片在线观看| 亚洲国产日韩综合久久精品| 99九九99九九九视频精品| 亚洲欧洲精品天堂一级 | 久久久亚洲精品一区二区三区 | 亚洲国产精品ⅴa在线观看| 国产一区二区三区四| 国产午夜精品一区二区三区嫩草| 国产老肥熟一区二区三区| 日本一区二区三区四区在线视频| 国产九色精品成人porny| 日本一区二区综合亚洲| fc2成人免费人成在线观看播放 | 在线精品视频免费播放| 亚洲成人激情社区| 欧美一区二区免费观在线| 精品制服美女久久| 国产女同性恋一区二区| 99国产一区二区三精品乱码| 一区二区三区.www| 欧美美女视频在线观看| 蜜臀av一级做a爰片久久| 久久久久国产一区二区三区四区| 福利一区在线观看| 亚洲精品老司机| 91精品国产全国免费观看| 国产伦精品一区二区三区免费| 中文字幕va一区二区三区| 欧美午夜影院一区| 久久99蜜桃精品| 国产精品的网站| 欧美精品丝袜中出| 国产毛片精品视频| 亚洲精品亚洲人成人网在线播放| 欧美日本一区二区三区四区| 婷婷综合在线观看| 99re66热这里只有精品3直播| 亚洲欧洲综合另类在线| 在线电影院国产精品| 国产精品88av| 午夜精品久久久久久久蜜桃app| 精品精品国产高清a毛片牛牛 | 国产日韩欧美在线一区| 在线影视一区二区三区| 卡一卡二国产精品| 亚洲日本护士毛茸茸| 精品久久久久一区| 在线观看一区二区视频| 国产美女在线观看一区| 亚洲午夜免费电影| 国产三级精品三级| 6080国产精品一区二区| 99久久久久久99| 精品在线观看免费| 亚洲国产精品久久人人爱蜜臀| 久久久久久影视| 91精品国模一区二区三区| 99久免费精品视频在线观看 | 91免费版在线看| 激情都市一区二区| 五月天国产精品| 亚洲日本韩国一区| 国产欧美日韩综合| 日韩三级精品电影久久久|