流密碼(序列密碼)與Rc4演算法

2021-07-16 09:38:30 字數 2197 閱讀 3185

「流密碼(序列密碼)與rc4演算法」

rc4是一種序列密碼,它是一種可變金鑰長度、面向位元組操作的序列密碼,乙個明文位元組與乙個金鑰位元組相異或產生乙個密文位元組。

演算法原理:對於n = 8位長的字,即以乙個位元組為單位,此時n = 256,用從1到256個位元組的可變長度金鑰初始化乙個256個位元組的狀態向量arr,arr中的元素arr[0],arr[1],,,arr[255],自始至終置換後的arr包含0~255的所有8位元數,金鑰流中的金鑰key由arr中256個元素按一定方式選出乙個元素來充當;每生成乙個key值,arr中的元素就被重新置換一次。

初始化:

將arr中的元素初始化成arr[0] = 0,arr[1] = 1,,,,,arr[255] = 255,設金鑰的長度為len,對於arr中的每個元素,由金鑰k將arr[i]中的元素進行置換,由於只是第陣列中的元素進行錯亂的排列,陣列arr中還包含0~255個元素。

//初始化的核心**

for (int i = 0; i < 256; i++)

//將陣列中的資料進行錯亂排列

for (int i = 0; i < 256; i++)

加密時,將輸入的明文與金鑰進行異或,解密時,將密文與金鑰進行異或。

//加密、解密的核心**

for (size_t j = 0; j < len; j++)

下面是完整的程式:

//標頭檔案「stream.h」

#pragma once

//序列密碼(流密碼)

#include void rc4(char* arr, char* ptr, size_t len)       //進行加密或者解密,arr是金鑰,ptr是明文

}void init(char *arr, char* key, size_t len)     //初始化金鑰,(金鑰排程演算法ksa)

;    char tmp = 0;

for (int i = 0; i < 256; i++)

//將陣列中的資料進行錯亂排列

for (int i = 0; i < 256; i++)

}void menu(char *arr, char* key, char* ptr)    //主選單

;    printf("**********************************\n");

printf("*********  ——rc4演算法   *********\n");

printf("*********  1.加密與解密  *********\n");

printf("*********  0.退出        *********\n");

printf("**********************************\n");

printf("---請選擇:");

scanf("%c", &n);

switch (n)

else

}init(arr, key, strlen(key));

for (int i = 0; i < 256; i++)          //儲存初始化後的arr

rc4(arr, ptr, strlen(ptr));       //加密

printf("\n輸出的密文為:");

printf("%s", ptr);

rc4(arr1, ptr, strlen(ptr));     //解密

printf("\n輸出的明文為:");

printf("%s", ptr);

break;

case '0':

exit(exit_failure);

default:

break;

}}

//原始檔stream.cpp

#define _crt_secure_no_warnings 1

#include #include #include "stream.h"

int main()

;    char key[256] = ;

char ptr[256] = ;

menu(arr, key, ptr);

system("pause");

return 0;

}

序列密碼之RC4

rc4是乙個典型的基於非線性陣列變換的序列密碼。它以乙個足夠大的陣列s為基礎,對其進行非線性變換,產生非線性的金鑰流序列。rc4演算法s盒的大小根據引數n的值而變化,通常n 8,這樣rc4可生成256個元素的陣列s 種子金鑰長度為1 256個位元組 8 2048位元 的可變長度,用於初始化256個位...

密碼學原理 流密碼和RC4演算法

金鑰輸入到乙個偽隨機數發生器,該偽隨機數發生器產生一串隨機的8位數,輸出的金鑰流和明文流的每個位元組進行對位異或運算,得到乙個位元組,解密時使用相同的偽隨機序列。設計流密碼需要注意 分組密碼的優點是可以重複使用金鑰,但如果流密碼對兩個文明用相同金鑰加密,那麼密文分析就相當容易。rc4是ron riv...

流密碼加密(RC4和LFSR)

演算法思想 1 先初始化狀態向量s 256個位元組,用來作為金鑰流生成的種子1 按照公升序,給每個位元組賦值0,1,2,3,4,5,6 254,255。2 初始金鑰 由使用者輸入 長度任意。如果輸入長度小於256個位元組,則進行輪轉,直到填滿。例如輸入金鑰的是1,2,3,4,5,那麼填入的是1,2,...