作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
你好,我正在研究 JAVA 中的仿射密码。我已经成功编写了加密代码,但现在我对解密逻辑一无所知。
下面是我的加密逻辑:
void encryption()
{
char character;
int plainTextLength=input.length();
int a=1,b=2,c=3,d=4,e=5,f=6,g=7,h=8,i=9,j=10,k=11,l=12,m=13,n=14,
o=15,p=16,q=17,r=18,s=19,t=20,u=21,v=22,w=23,x=24,y=25,z=26;
System.out.print("Cipher text is:" );
for (int in = 0; in < plainTextLength; in++)
{
character = input.charAt(in);
if (Character.isLetter(character))
{
character = (char)((firstKey*(character - 'a') + secondKey) % 26 + 'a');
}
System.out.print(character);
}
System.out.println();
}
这是我的加密逻辑:character = (char)((firstKey*(character - 'a') + secondKey) % 26 + 'a');
什么是解密逻辑。我完全糊涂了?
最佳答案
一般的仿射密码解密公式很简单:
a 是您的firstKey
,b 是您的secondKey
。
所以加密/解密可以通过以下方式实现:
private static int firstKey = 5;
private static int secondKey = 19;
private static int module = 26;
public static void main(String[] args) {
String input = "abcdefghijklmnopqrstuvwxyz";
String cipher = encrypt(input);
String deciphered = decrypt(cipher);
System.out.println("Source: " + input);
System.out.println("Encrypted: " + cipher);
System.out.println("Decrypted: " + deciphered);
}
static String encrypt(String input) {
StringBuilder builder = new StringBuilder();
for (int in = 0; in < input.length(); in++) {
char character = input.charAt(in);
if (Character.isLetter(character)) {
character = (char) ((firstKey * (character - 'a') + secondKey) % module + 'a');
}
builder.append(character);
}
return builder.toString();
}
static String decrypt(String input) {
StringBuilder builder = new StringBuilder();
// compute firstKey^-1 aka "modular inverse"
BigInteger inverse = BigInteger.valueOf(firstKey).modInverse(BigInteger.valueOf(module));
// perform actual decryption
for (int in = 0; in < input.length(); in++) {
char character = input.charAt(in);
if (Character.isLetter(character)) {
int decoded = inverse.intValue() * (character - 'a' - secondKey + module);
character = (char) (decoded % module + 'a');
}
builder.append(character);
}
return builder.toString();
}
输出:
Source: abcdefghijklmnopqrstuvwxyz
Encrypted: dinsxchmrwbglqvafkpuzejoty
Decrypted: abcdefghijklmnopqrstuvwxyz
关于java - 如何在JAVA中编写仿射密码解密的逻辑?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19605465/
我是一名优秀的程序员,十分优秀!