1. 程式人生 > >簡單的加密系統(位運算)

簡單的加密系統(位運算)

加密程式碼:

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define N sizeof(unsigned char)*8
typedef unsigned char uchar;
uchar rol(uchar x,int n)
{
    uchar l=x<<n;
    uchar r=x>>(N-n);
    uchar res=l|r;
    return res;
}
uchar ror(uchar x,int n)
{
    uchar l=x>>n;
    uchar r=x<<(N-n);
    uchar res=l|r;
    return res;
}
int main()
{
    char key[10];
    char psd[10];
    int newkey[10];
    int ecykey[10];
    int i;
    puts("請輸入加密系統關鍵字序列key:");
    gets(key);
    puts("請輸入使用者原始密碼:");
    gets(psd);
    newkey[0]=rol(key[0],3);
    newkey[1]=key[1];
    newkey[2]=ror(key[2],3);
    ecykey[0]=psd[0]^newkey[0];
    ecykey[3]=psd[3]^newkey[0];
    ecykey[6]=psd[6]^newkey[0];
    ecykey[1]=psd[1]^newkey[1];
    ecykey[4]=psd[4]^newkey[1];
    ecykey[7]=psd[7]^newkey[1];
    ecykey[2]=psd[2]^newkey[2];
    ecykey[5]=psd[5]^newkey[2];
    puts("使用者加密後的密碼序列:");
    for(i=0;i<=7;i++)
        printf("%d ",ecykey[i]);
    return 0;
}

解密程式碼:

#include<stdio.h>
#include<string.h>
#define N sizeof(unsigned char)*8
typedef unsigned char uchar;
uchar rol(uchar x,int n)
{
    uchar l=x<<n;
    uchar r=x>>(N-n);
    uchar res=l|r;
    return res;
}
uchar ror(uchar x,int n)
{
    uchar l=x>>n;
    uchar r=x<<(N-n);
    uchar res=l|r;
    return res;
}
int main()
{
    char key[10];
    char psd[10];
    int newkey[10];
    int ecykey[10];
    int i;
    puts("請輸入加密系統關鍵字序列key:");
    gets(key);
    puts("請輸入使用者加密後的密碼序列:");
    for(i=0;i<8;i++)
        scanf("%d",ecykey+i);
    newkey[0]=rol(key[0],3);
    newkey[1]=key[1];
    newkey[2]=ror(key[2],3);
    psd[0]=ecykey[0]^newkey[0];
    psd[3]=ecykey[3]^newkey[0];
    psd[6]=ecykey[6]^newkey[0];
    psd[1]=ecykey[1]^newkey[1];
    psd[4]=ecykey[4]^newkey[1];
    psd[7]=ecykey[7]^newkey[1];
    psd[2]=ecykey[2]^newkey[2];
    psd[5]=ecykey[5]^newkey[2];
    puts("使用者原始密碼為:");
    for(i=0;i<8;i++)
        printf("%c",psd[i]);
    puts("");
    return 0;
}

相關推薦

簡單加密系統運算

加密程式碼: #include<stdio.h> #include<string.h> #include<stdlib.h> #define N sizeof(unsigned char)*8 typedef unsigned char

加密可以這樣簡單運算

     通過位運算的“^”異或運算子把字串與一個指定的值進行異或運算,從而改變字串每個字元的值,這樣就可以得到一個加密後的字串。當把加密後的字串作為程式輸入內容,異或運算會把加密後的字串還原為原有字串的值,如圖          建立Example類,在該類的主方法中建

實例11 加密可以這樣簡單運算

sta 組元 public ati () 結果 for bsp new package wjf;import java.util.Scanner;public class wjf1 { public static void main(String[] args){

51Nod 1069 Nim遊戲 運算

過程 cstring nco 表示 比賽 pac 如果 tdi ace 題目鏈接:https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1069 有N堆石子。A B兩個人輪流拿,A先拿。每次只

[LeetCode] 137. Single Number II 運算

清零 一次 .com blog 適用於 soft hat ever rip 傳送門 Description Given an array of integers, every element appears three times except for one, w

關於Java實現的進制轉化運算

一、需求: 最近在做檔案傳輸的東西,檔案傳輸當然是傳輸很重要,包括編碼格式以及進位制的統一。 簡略的說一下這次做的東西:首先檔案是按照塊來發送的,一塊一塊大的發,但是,傳送的過程是這樣的; 先發送頭部,頭部包括三部分:1.一個int型別的檔案Id,               2.一個long型別的偏

計算一個二進位制數中數字“1”的個數運算

int numberOfOne( unsigned value ) { int count; for( count = 0; value != 0; value >>= 1 ) if( ( value & 1 ) != 0 )//如果最低位是1,就增加計數器的

BZOJ 2728: [HNOI2012]與非運算

題意 定義 NAND(與非)運算,其運算結果為真當且僅當兩個輸入的布林值不全為真,也就是 A NAND B = NOT(A AND B) ,運算位數不會超過 \(k\) 位, 給你 \(n\) 個整數 \(A_i\) ,這些數能任意進行無數次與非運算,最後問能運算出多少個在 \([L, R]\) 區間的數

求一組數的出現一次的數運算

a^a=0 ; a^0=a; 一個數只出現一次,可以將整個陣列進行^處理,相同的會為0,直到出現一次的數^後即為它本身。 有a、b兩個數只出現一次,可以先將整個陣列^處理,得到c,c =a^b,找出

1019 Separate the Animals 35 分DFS或BFS搜尋+運算狀態去重

題目連結:https://pintia.cn/problem-sets/994805148990160896/problems/994805149963239424 直接暴力搜尋每一種障礙的狀態,用dfs和bfs都可以(我用的dfs),沒找到一種狀態bfs檢查現在有多少個洞,有沒有動物相連。

經典混合加密系統java實現

此理論知識摘自《電子商務安全導論》一書 由於網路協議的開放行,資料在網路傳輸的過程中,難以避免的會出現安全性問題. 實際上,在一次資訊傳送過程中,可以綜合利用訊息加密、數字信封、雜湊函式和數字簽名實現安全性、完整性、可鑑別性和不可否認.具體過程如下: (1)傳送方A   ①求明文訊息

N皇后問題運算

描述 會下國際象棋的人都很清楚:皇后可以在橫、豎、斜線上不限步數地吃掉其他棋子。如何將8個皇后放在棋盤上(有8 * 8個方格),使它們誰也不能被吃掉!這就是著名的八皇后問題。 在國際象棋棋盤上放置

運算把字串轉換成整數

public int StrToInt(String str) { if (str == null || str.len

300.4 加密利用運算^

iuc com mar style 加密 ref href lan target 5VLB腳5錄N淺茨陶1煙http://tushu.docin.com/eyer5452 2M73木畢傻7UKA來諗5http://tushu.docin.com/sina_63452072

使用Struts2和jQuery EasyUI實現簡單CRUD系統——jsp,json,EasyUI的結合

元素 word cli resultset sheet 傳輸 charset {} tco 這部分比較復雜,之前看過自己的同學開發一個選課系統的時候用到了JSON,可是一直不知道有什麽用。寫東西也沒用到。所以沒去學他。然後如今以這樣的懷著好奇心,這是做什麽用的,這是怎麽用

nyist oj 138 找球號(二hash 表+運算

pan char s geo 運算 arch font msu 哈希 next 找球號(二) 時間限制:1000 ms | 內存限制:65535 KB 難度:5 描寫敘述 在某一國度裏流行著一種遊戲。遊戲規則為:現有一堆球中。每一個球上都有一個整數編號i

HDU 1198 Farm Irrigation並查集+運算

another org des clas accepted som using red wan Farm Irrigation Time Limit : 2000/1000ms (Java/Other) Memory Limit : 65536/32768K (Java

1315 合法整數集運算+模擬

去掉 出現 its eml nbsp out %d 技術分享 aps 1315 合法整數集 題目來源: TopCoder 基準時間限制:1 秒 空間限制:131072 KB 分值: 10 難度:2級算法題 收藏 關註 一個整數集合S是合法的,指S的任意子集

軟件補丁問題SPFA+運算

%d 時空 容易 轉移 and DC 修復 兩種 += 洛谷P2761 1.考慮到所有的錯誤只有“修復,未修復”兩種情況,所以可以用0,1標記壓縮狀態,采用位運算減少時空浪費。 又考慮到有修復時間的關系,將時間抽象成邊,將狀態抽象為點(設修復為0,未修復為1)最後從(1&l

HDU - 3006 The Number of set狀態壓縮運算

memset scl 所有 targe oid print push out queue http://acm.hdu.edu.cn/showproblem.php?pid=3006 題意 給定n個集合,每個集合都是由大於等於1小於等於m的數字組成,m最大為14。問由給