自定你的訊息:仿射密碼 Java257
在這個數位時代,保護我們的秘密訊息至關重要。其中一種古老而有效的加密技術是仿射密碼,它利用數學轉換將訊息隱藏起來。
仿射密碼是一種替換密碼,將每個明文字元替換為密文字元,但替換規則是根據線性方程式定義的。這個方程式由兩個參數決定:加法常數 a 和乘法常數 b,表示為 E(x) = (ax + b) mod m。其中,m 是密碼表的字元數,通常是 26(適用於英文字母)。
例如,如果我們選擇 a = 3、b = 5 和 m = 26,則密碼表如下所示:| 明文 | A | B | C | D | E | F | G | H | I | J | K | L | M |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 密文 | D | E | F | G | H | I | J | K | L | M | N | O | P |
要使用這個密碼加密訊息,我們將每個明文字母替換為對應的密文字母。例如,加密訊息 "HELLO" 將變成 "LIHQQ"。
解密過程與加密相似,但使用逆方程式 D(x) = (a^-1(x - b)) mod m,其中 a^-1 是 a 的模反數。對於上述範例,a^-1 = 9,因此解密方程式為 D(x) = (9(x - 5)) mod 26。
現在,讓我們使用 Java 程式碼實現仿射密碼:```java
import ;
public class AffineCipher {
public static void main(String[] args) {
Scanner input = new Scanner();
// 獲取使用者輸入的參數
("輸入加法常數 a (1-25): ");
int a = ();
("輸入乘法常數 b (0-25): ");
int b = ();
// 檢查參數是否有效
if (a < 1 || a > 25 || b < 0 || b > 25) {
("無效的參數。請輸入 1-25 (a) 和 0-25 (b)。");
return;
}
// 獲取使用者輸入的訊息
("輸入要加密的訊息: ");
String message = ();
message = ();
// 加密訊息
String encryptedMessage = "";
for (char c : ()) {
int index = c - 'A';
int encryptedIndex = (a * index + b) % 26;
char encryptedChar = (char) ('A' + encryptedIndex);
encryptedMessage += encryptedChar;
}
// 印出加密後的訊息
("加密後的訊息: " + encryptedMessage);
// 解密訊息
String decryptedMessage = "";
for (char c : ()) {
int index = c - 'A';
int decryptedIndex = (a^-1 * (index - b)) % 26;
char decryptedChar = (char) ('A' + decryptedIndex);
decryptedMessage += decryptedChar;
}
// 印出解密後的訊息
("解密後的訊息: " + decryptedMessage);
}
}
```
使用這個程式,你可以使用自訂的參數加密和解密訊息,確保訊息的安全性和隱私性。
2024-12-08
上一篇:Java 实现 2048 游戏
Java方法栈日志的艺术:从错误定位到性能优化的深度指南
https://www.shuihudhg.cn/133725.html
PHP 获取本机端口的全面指南:实践与技巧
https://www.shuihudhg.cn/133724.html
Python内置函数:从核心原理到高级应用,精通Python编程的基石
https://www.shuihudhg.cn/133723.html
Java Stream转数组:从基础到高级,掌握高性能数据转换的艺术
https://www.shuihudhg.cn/133722.html
深入解析:基于Java数组构建简易ATM机系统,从原理到代码实践
https://www.shuihudhg.cn/133721.html
热门文章
Java中数组赋值的全面指南
https://www.shuihudhg.cn/207.html
JavaScript 与 Java:二者有何异同?
https://www.shuihudhg.cn/6764.html
判断 Java 字符串中是否包含特定子字符串
https://www.shuihudhg.cn/3551.html
Java 字符串的切割:分而治之
https://www.shuihudhg.cn/6220.html
Java 输入代码:全面指南
https://www.shuihudhg.cn/1064.html