数据处理算法-仿射密码加密(Java编码实现)

本文介绍了一个使用仿射密码进行编码的过程。通过提取特定字符串中的字母作为明文信息,并从中抽取数字作为密钥。之后利用这些明文信息和密钥进行仿射编码,最终生成红外码。文章详细展示了如何实现这一过程的Java代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

转载于:https://blog.youkuaiyun.com/Dimpies/article/details/104023793


import java.util.ArrayList;

public class AffineCode {

	public static void main(String[] args) {
		String Qr_Str="305a56b45c5d52e989f45451g";
		String Affine=Affine_Str(Qr_Str);//提取明文信息
		System.out.println("待处理的字符串:"+Qr_Str);
		int[] key=key(Qr_Str);//提取密钥
		Affine_Code(Affine,key);//提取红外码
	}
	
	public static String Affine_Str(String Qr_Str) {
		char[] chars=Qr_Str.toCharArray();
		char[] Str_a=new char[7];
		int str_index=0;
		ArrayList<Integer> array=new ArrayList<Integer>();//定义动态数组

		for(int i=0;i<Qr_Str.length();i++) {
			if((chars[i]>='a'&&chars[i]<='z')) {
				Str_a[str_index]=chars[i];
				str_index++;
				if(str_index==8) {
					break;
				}
			}
		}
		
		String Affine_a=new String(Str_a);
		System.out.print("提取的明文信息:"+Affine_a);
		System.out.println();

		return Affine_a;
	}
	
	public static int[] key(String Qr_Str) {
		char[] chars=Qr_Str.toCharArray();
		ArrayList<Integer> array=new ArrayList<Integer>();
		int[] key=new int[2];

		for(int i=0;i<Qr_Str.length();i++) {
			if((chars[i]>='0'&&chars[i]<='9')) {
				int num=(chars[i]-'0');
				array.add(num);
			}
		}
	
		System.out.print("提取出来的数字:");
		for(int n:array) {
			System.out.print(n);
		}
		
		key[0]=array.get(0);
		key[1]=array.get(array.size()-1);
		System.out.println();
		System.out.format("密钥: K=(%d,%d)",key[0],key[1]);
		
		return key;
	}
	

	
	public static int[] Affine_Code(String Affine,int[] key) {
		int[] infrared_coder=new int[6];
		
		char[] Affine_a=Affine.toCharArray();
		char[] Affine_A=new char[7];
		for(int i=0;i<7;i++) {
			Affine_A[i]=(char) ((key[0]*(Affine_a[i]-'a')+key[1])%26+'A');				
		}
		for(int i=0;i<6;i++) {
			if(i%2==0) {
				infrared_coder[i]=Math.abs(Affine_A[i+1]-Affine_A[i]);
			}
			else {
				infrared_coder[i]=Math.abs(Affine_A[i+1]+Affine_A[i]);
			}
	
		}
		System.out.println();
		for(char n:Affine_A) {
			System.out.print(n+" ");
		}
		System.out.println();
		System.out.print("红外码:");
		for(int n:infrared_coder) {
			System.out.print(Integer.toHexString(n)+" ");
		}
		
		return infrared_coder;//返回红外码
	}
}

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值