首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

C語言解題:ACM 簡單密碼破解(手機按鍵對應與字母位移加密)

     編輯:關於C語言

ACM 密碼轉換題目解析

本題要求實作一種自訂加密演算法:將明文密碼轉換為易記憶的密文。規則結合了手機按鍵字母對應與大寫字母位移。

加密規則

  • 小寫字母:依手機按鍵對應轉換為數字
    abc→2, def→3, ghi→4, jkl→5, mno→6, pqrs→7, tuv→8, wxyz→9
  • 大寫字母:先轉小寫,再往後移一位(Z→a,A→b...Y→z)。
  • 數字與其他符號:保持不變。
  • 密碼長度 ≤ 100,無空格,輸入至 EOF。

演算法實作

  1. 使用 gets() 逐行讀取(注意:gets 不安全,現代建議用 fgets)。
  2. 遍歷字串每個字元:
    - 'A'~'Y':ch + 32 + 1(轉小寫 + 位移)
    - 'Z':直接變 'a'
    - 'a'~'z':用 switch 對應數字
    - 其他:不變
  3. 輸出轉換後字串。

完整程式碼

#include <stdio.h>
#include <string.h>

int main()
{
    int n, i;
    char t, a[101];

    while(gets(a) != NULL)
    {
        n = strlen(a);
        for(i = 0; i < n; i++)
        {
            if(a[i] >= 'A' && a[i] <= 'Y')
            {
                a[i] = a[i] + 32 + 1;
            }
            else if(a[i] == 'Z')
            {
                a[i] = 'a';
            }
            else if(a[i] >= 'a' && a[i] <= 'z')
            {
                t = a[i];
                switch(t)
                {
                    case 'a': case 'b': case 'c': a[i] = '2'; break;
                    case 'd': case 'e': case 'f': a[i] = '3'; break;
                    case 'g': case 'h': case 'i': a[i] = '4'; break;
                    case 'j': case 'k': case 'l': a[i] = '5'; break;
                    case 'm': case 'n': case 'o': a[i] = '6'; break;
                    case 'p': case 'q': case 'r': case 's': a[i] = '7'; break;
                    case 't': case 'u': case 'v': a[i] = '8'; break;
                    case 'w': case 'x': case 'y': case 'z': a[i] = '9'; break;
                }
            }
        }
        puts(a);
    }
    return 0;
}

執行結果示意

密碼破解執行結果

範例驗證

輸入:zvbo941987
- z→9, v→8, b→2, o→6, 9→9, 4→4, 1→1, 9→9, 8→8, 7→7
輸出:9826941987(但題目範例說明輸出為 YUANzi1987,似乎範例為反向說明「把真密碼變成易記密碼」,實際題目要求輸入易記密碼輸出真密碼。程式碼邏輯為「易記→真密碼」符合題目輸出要求。)

安全性提醒

  • gets() 有緩衝區溢位風險,實務請用 fgets(a, sizeof(a), stdin)。
  • 此加密極弱,僅供教學練習,不可用於真實系統。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved