• <noscript id="e0iig"><kbd id="e0iig"></kbd></noscript>
  • <td id="e0iig"></td>
  • <option id="e0iig"></option>
  • <noscript id="e0iig"><source id="e0iig"></source></noscript>
  • 現代密碼學實驗2 RC4加/解密算法

    標簽: 現代密碼學

    贊賞碼 & 聯系方式 & 個人閑話

    【實驗名稱】RC4加/解密算法

     

    【實驗目的】

    1、理解流密碼的概念及相關結構;

    2、理解并能夠編寫基本的流密碼體制;

    3、熟練應用一種編程語言實現RC4密碼算法體制。

     

    【實驗原理】

    RC4算法是一種序列密碼體制或稱流密碼體制,其加***和解***相同RC4的**長度可變,但為了確保哪去安全強度,目前RC4至少使用128位的**。

    用1~256個字節(8~2048位)的可變長度**初始化一個256個字節的狀態向量S,S的元素記為S[0],S[1],…,S[255],從始至終置換后的S包含從0到255的所有8位數。對于加密和解密,字節K是從S的255個元素中按一種系統化的方式選出的一個元素生成的。每生成一個K的值,S中的元素個體就被重新置換一次。

     

    【實驗內容】

    實驗內容:編程實現RC4加/解密算法。

    RC4算法是一種流加密算法,**長度可變。它加解密使用相同的**,因此也屬于對稱加密算法。而其當**長度足夠長時,用暴力法****已經不太現實,所以可以抵御暴力搜索的攻擊。

    RC4算法主要有:初始化、產生**流、加解密三部分。初始化的目的是使用**將S-box攪亂,使得S-box的每個元素都得到處理并是隨機的。隨后根據明文和**生成相應的**流。最后將**流同明文異或即可得到密文,再將其于密文異或即可得到明文。

    根據以上思路,編寫C語言代碼如下:

    #include<stdio.h>
    #include<string.h>
    int main()
    {
    	char input[256];
    	printf("請輸入需要加密的數據:\n");
    	scanf("%s",input);
    	char key[256];
    	printf("請輸入**:\n");
    	scanf("%s",key);
    
    	//初始化
    	char s[256] = { '0' };
    	int i = 0, j = 0;
    	char t[256] = { '0' };
    	char temp;
    	for (i = 0; i<256; i++)
    	{
    		s[i] = i;
    		t[i] = key[i%strlen(key)];
    	}
    	for (i = 0; i<256; i++)
    	{
    		j = (j + s[i] + t[i]) % 256;
    		temp = s[i];
    		s[i] = s[j];
    		s[j] = temp;
    	}
    	//產生**流
    	char k[256] = { '0' };
    	i = 0; j = 0;
    	int p = 0, r = 0;
    	int length = strlen(input);
    	for (r = 0; r < length; r++)
    	{
    		i = (i + 1) % 256;
    		j = (j + s[i]) % 256;
    		temp = s[i];
    		s[i] = s[j];
    		s[j] = temp;
    		p = (s[i] + s[j]) % 256;
    		k[r] = s[p];
    	}
    	//加密
    	char output[256] = { '0' };
    	for (r = 0; r < length; r++)
    	{
    		output[r] = input[r] ^ k[r];
    	}
    	printf("加密后密文為:%s\n", output);
    	//解密
    	char result[256] = { '0' };
    	for (r = 0; r < length; r++)
    	{
    		result[r] = output[r] ^ k[r];
    	}
    	printf("解密后明文為:%s\n", result);
    	return 0;
    }
    

    程序執行結果如下:

     

    至此實驗順利完成。

     

    【小結或討論】

    這一次的RC4算法比上一次的實驗難度有所增加。我一開始是使用Matlab語言編寫的。但Matlab語言對此實驗存在一定的不足之處,比如Matlab語言比C語言相對更高級一些,不像C語言一樣能非常方便地控制字符串的編碼格式和數值,它的定義變量時甚至不用規定變量類型。而且Matlab的數組下標從1開始,其對中文字符的編碼格式也有一定的特殊之處。

    我先是將RC4算法加入了自己的想法和調整以適應Matlab語言的格式,并且順利得出了實驗結果。但是我們知道,RC4算法加解密都是通過異或來實現,兩次異或完全可以相互抵消,這為我們代碼的糾錯和調整帶來了不便。

    所以為了按照流程寫出一個相對標準的RC4算法,我使用C語言將這次實驗重新做了一遍,得出了如上文的實驗結果。在重寫的過程中,進一步加深了我對基本的流密碼體制的理解。

    版權聲明:本文為qq_37672864原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接和本聲明。
    本文鏈接:https://blog.csdn.net/qq_37672864/article/details/102519782

    智能推薦

    信息安全與密碼學第三周作業——Python語言實現RC4算法

    Python語言實現RC4算法。 這周的信息安全作業,RC4算法的實現。 參考了這位大佬:https://blog.csdn.net/u011377996/article/details/85221508 總體上來說分為三部分,初始化,密碼流,加密解密。 初始化函數 解釋:從外部獲取一個key,把S 初始化成0,1,2,……255 通過len函數,得出獲取的key的長度...

    加密解密算法之RC4

    參考鏈接:https://www.biaodianfu.com/rc4.html 前言 感覺RC4算法還是很常見的,特此學習下特征。 https://github.com/anthonywei/rc4 各種語言的rc4實現 介紹 RC4算法是一種對稱加密算法,所謂對稱加密,就是加密和解密的過程是一樣的. 這種對稱性是基于密匙流加密的特征。密匙流就是說我的數據是N位,那么我通過一定算法生成N位的數據...

    對稱加密之流密碼RC4

    對稱流式加密RC4算法 在前面文章中介紹了兩種對稱分組加密算法DES和AES,在本文將介紹另外一種對稱加密方式——對稱流式加密(流密碼),和對稱分組加密一樣,流密碼也是采用單**,但與分組加密不同,流式加密不是對明文分組后對每個分組進行同樣的加密操作,而是根據**產生一個偽隨機密碼流,連續不斷地對明文字節流進行處理,產生密文輸出流。 一. 隨機數和偽隨機數介紹 在給多樣的網...

    RC4算法原理與應用 —— 密碼與密碼工程實踐No.1

    RC4密碼簡介: RC4是由美國密碼學家Ron Rivest在1987年設計的流密碼算法,該算法被廣泛用于 SSL/TLS協議(Socket Secure Layer, SSL)/(Transport Layer Security, TLS),WEP(Wired Equivalent Privacy, WEP)協議和 WPA(Wi-Fi Protected Access, WPA)協議,也作為蜂窩...

    密碼學實驗 | shamir門限秘密共享算法(python)

    shamir門限秘密共享算法 一、實驗原理 二、實驗代碼 三、實驗結果 四、實驗總結 一、實驗原理 (t,n)門限秘密共享方案,該方案是Shamir和Blakley在1979年各自獨立地提出。 (t,n)門限方案是基于(t.n)門限訪問結構上的秘密共享方案,而(t,n)門限訪問結構包括所有t個或t個以上的參與者子集所構成的集合。 1. Shamir (t,n)門限方案是通過構造一個t-1次多項式,...

    猜你喜歡

    現代密碼學之對稱加密-DES及AES算法

    提示: 本文章基于上一篇基礎理論知識介紹 鏈接: 現代密碼學之描述概要(一) DES加密 示例代碼 des加密算法 Cipher :文檔 https://docs.oracle.com/javase/8/docs/api/javax/crypto/Cipher.html#getInstance-java.lang.String- 運行: 修改 ** key = “12345678&rd...

    神奇的Batch Normalization 如果一個模型僅訓練BN層會是什么樣的

    您可能會感到驚訝,但這是有效的。 ? 最近,我閱讀了arXiv平臺上的Jonathan Frankle,David J. Schwab和Ari S. Morcos撰寫的論文“Training BatchNorm and Only BatchNorm: On the Expressive Power of Random Features in CNNs”。 這個主意立刻引起了...

    用Python實現校園通知更新提醒

    前言 這個項目實已經在一個月前已經完成了,一直都想寫一篇博客來總結這個過程中遇到的一些問題。但最近一個月來都比較忙,所以一直拖到了現在。 首先說說起因吧,我沒事的時候,總喜歡依次點開學校主頁、教務處、圖書館以及學院的網站,看看有沒有什么新通知,雖然大多與我無關。恰逢最近正在學Python,經常聽到別人說用Python寫爬蟲很簡單,但自己尚未接觸過爬蟲。于是抱著試一試的心態看了幾篇關于Python爬...

    spring_ioc相關_第一章

    1 spring是一站式框架,在javaee的三層結構中,每一層都提供不提并的解決技術 web層:springMVC service層:spring的ioc dao層:spring的jdbcTemplate 2 javaee為避免兩個類之間出現耦合,則把對象的創建交給spring進行管理,spring的ioc操作:(1)ioc的配置文件方式;(2)ioc注解方式 3 ioc的底層原理使用技術(1)...

    【Python+OpenCV】視頻流局部區域像素值處理-一種特征提取方法

    參考我之前寫的處理圖片的文章:Python+OpenCV實現【圖片】局部區域像素值處理(改進版) 開發環境:Python3.6.0 + OpenCV3.2.0 任務目標:攝像頭采集圖像(例如:480*640),并對視頻流每一幀(灰度圖)特定矩形區域(480*30)像素值進行行求和,得到一個480*1的數組,用這480個數據繪制條形圖,即在逐幀采集視頻流并處理后“實時”顯示采...

    精品国产乱码久久久久久蜜桃不卡