加法密码java_仿射密码(加法密码+乘法密码)

本文介绍了如何使用Java实现加法和乘法仿射密码,包括加密和解密过程。通过欧拉函数计算密钥空间,并提供了一个测试案例,展示了加密和解密的具体步骤。
摘要由CSDN通过智能技术生成

C= Ek(m)=(k1 m+k2) mod n , K1,K2∈Zn ,gcd(k1,n)=1

M= Dk(c)=k3(c- k2) mod n(其中k3为k1逆元)

(1)0

(2)k1与n互素,即要满足gcd(k1, n)=1,否则不存在模逆元,不能正确解密

所以即满足乘法密码技术的要求,又满足加法密码的要求,如复合函数一般

K1 K2为密钥。当K1=0时,仿射密码即为乘法密码技术,当K1=1时,即为移位替换密码(加法密码)

乘法密码的密码空间大小是φ(n),φ(n)是欧拉函数。

当n为26字母,则与26互素的数是1、3、5、7、9、11、15、17、19、21、23、25,即φ(n)=12 因此乘法密码的密钥空间为12。

注意:K1=1时 加密变换为恒等变换(即无变化)

测试案例如下:

import java.util.ArrayList;

import java.util.Scanner;

public class 仿射密码技术 {

public static int x=0,y=0;

public static ArrayList SecretPlace=new ArrayList();

public static int gcd(int a,int b){

return b>0?gcd(b,a%b):a;

}

public static int ex_gcd(int a,int b){

if(b=&

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值