`
itace
  • 浏览: 184919 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

质数加密

    博客分类:
  • java
 
阅读更多
public class EncryptionUtil {

	//偏移量-100内的质数
	private static final int[] offset = {2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97};
	/**
	 * 加密
	 * @param text
	 * @return
	 */
	public static String encode(String text){
		int distance_period = offset.length;
		char[]cs = text.toCharArray();
		char[]cs2 = new char[cs.length];
		for (int i = 0; i < cs.length; i++) {
			if(i+1>distance_period){
				int remainder = (i+1)%distance_period;
				cs2[i]=(char)(cs[i]+offset[remainder]);
			}else{
				cs2[i]=(char)(cs[i]+offset[i]);
			}
		}
		return new String(cs2);
	}
	/**
	 * 解密
	 * @param text
	 * @return
	 */
	public static String decode(String text){
		int distance_period = offset.length;
		char[]cs = text.toCharArray();
		char[]cs2 = new char[cs.length];
		for (int i = 0; i < cs.length; i++) {
			if(i+1>distance_period){
				int remainder = (i+1)%distance_period;
				cs2[i]=(char)(cs[i]-offset[remainder]);
			}else{
				cs2[i]=(char)(cs[i]-offset[i]);
			}
		}
		return new String(cs2);
	}
	/**
	 * 合数composite提取约数approximate
	 * 约数公因子:肯定是质数,只需考虑除了2以外的奇数
	 * @param x
	 * @return
	 */
	public static Integer[] getFactors(int x){
		double max = (x+1.0)/2;
		List<Integer> list = new ArrayList<Integer>();
		int i = 2;
		while (i<max) {
			int remainder = x%i;
			if(remainder==0){
				int quotients = x/i;
				x=quotients;
				list.add(i);
				continue;
			}
			if(i>2){
				i+=2;
			}else{
				i++;
			}
		}
		Integer[]t = new Integer[list.size()];
		t = list.toArray(t);
		return  t;
	}
	/**
	 * 是否质数
	 * @param x
	 * @return
	 */
	public static boolean prime(int x){
		if(x==2){
			return true;
		}
		if(x%2==0){
			return false;
		}
		double max = x/2.0;
		for (int i = 3; i < max; i+=2) {
			int remainder = x%i;
			if(remainder==0){
				return false;
			}
		}
		return true;
	}
	
	public static void main(String[] args) {
		
		String text = "根据会议日程安排,成员国元首先举行小范围。";
		System.out.println(encode(text));
		System.out.println(decode(encode(text)));
		//质数除了2都是奇数,
//		int n = 2;
//		System.out.println(prime(n));
//		Integer s[] = getFactors(n);
//		for (int i : s) {
//			System.out.println(i);
//		}
		//一亿里面每一百个数中质数的数量  //	1671800-1671900=0
//		for (int j = 1; j < 1000000; j++) {
//			List<Integer> list = new ArrayList<Integer>();
//			int start = (j-1)*100;
//			int end = j*100;
//			for (int i = start; i < end; i++) {
//				if (prime(i)) {
//					list.add(i);
//				}
//			}
//			if(list.size()<3){
//				System.out.println(start+"-"+end+"="+list.size());
//			}
//		}
		

	}
}

 

分享到:
评论

相关推荐

    RSA 小素数文本加密

    RSA算法是一种非对称加密技术,它基于两个大素数的乘积,即公钥,以及这两个素数的因子,即私钥。这种加密方法在信息安全领域广泛应用,尤其是在数据传输和数字签名中。以下是关于RSA小素数文本加密的一些详细知识点...

    RSA单一小质数加密程序.rar

    简单的文件加密程序,使用大量的公钥私钥对。本程序并非最终产品,没有向预先目标那样同时使用流密码,以后是要加上的。

    rsa素数生成及加密算法

    可以随机生成素数,并生成公钥私钥,对明文进行加密。

    随机产生一个素数用于计算机信息加密

    根据给定的信息,本文将详细解释“随机产生一个素数用于计算机信息加密”的知识点,包括素数的概念、素数在加密中的应用以及如何通过编程实现随机生成素数。 ### 素数的基本概念 素数是指只能被1和自身整除的大于1...

    Rabin加密算法.rar_rabin 算法_rabin加密_加密_加密算法_大素数

    在提供的`code.cpp`源代码中,可能会包含实现Rabin加密算法的主要函数,如生成大素数、计算模逆元、加密和解密操作。`code_func.h`可能包含了相关的辅助函数声明。`Project.dev`可能是开发环境的项目文件,`Project....

    Android RSA加密jar包

    RSA加密的基本原理是基于两个大素数的乘积,这两个大素数只有乘积关系,很难从结果反推出原始素数。加密过程使用公钥,解密过程使用私钥。这样,即使公钥被截获,攻击者也无法解密数据,因为没有对应的私钥。在...

    二素数RSA加密器

    可运行的RSA加密器,需用dev_c++运行

    对称加密非对称加密

    RSA算法基于数论中的大素数分解难题,确保了加密的安全性。这种机制使得用户可以公开发布自己的公钥,而无需担心数据被未授权的人解密。非对称加密在数字签名、安全电子邮件、HTTPS等场景中广泛应用。然而,非对称...

    RSA加密解密工具,用于文件的加密和解密* RSA加密解密:私钥解密,公钥加密

    RSA基于大数因子分解的困难性,通过两个大素数的乘积生成公钥和私钥,加密和解密过程涉及到指数运算和模逆运算。 2. **公钥和私钥管理**:用户需要妥善保管私钥,因为它是解密的唯一关键,一旦丢失或被泄露,加密的...

    C# .net版 RSA 公钥加密私钥解密 私钥加密公钥解密

    RSA算法基于两个大素数的乘积,这个乘积作为公钥,而这两个大素数作为私钥。公钥可以公开,任何人都可以使用公钥对数据进行加密,但只有知道私钥的人才能解密,因为解密过程涉及到大数因子分解,这在当前计算能力下...

    java编写的加密解密工具,有对称加密和非对称加密

    RSA是一种广泛使用的非对称加密算法,它基于大素数分解的困难性,适用于加密少量数据或者作为密钥交换的手段。在Java中,我们可以使用`java.security`包中的`KeyPairGenerator`和`Cipher`类来实现RSA加密解密。 ...

    RSA非对称加密算法

    由于计算大整数乘积是相对容易的,但是将这个乘积分解回两个原始的素数却很难,这导致了加密的速度相对较慢,尤其是当密钥长度增加时,加密解密过程需要的时间会变得较长。因此,在实际应用中,为了提高效率,常常...

    Paillier 同态加密

    Paillier同态加密是一种公钥加密算法,它具备一些特殊的性质,这些性质使得它在加密过程中仍然能够对加密后的数据进行特定的数学运算,并且保持运算结果的同态性质,即密文运算的结果在解密后与明文运算的结果相同。...

    RAS公钥加密私钥解密的例子(加密文件)

    生成的密钥对包含一个公钥和一个私钥,它们是数学上的互逆关系,基于大素数的乘积和欧拉函数等复杂的数学原理。 加密过程如下: 1. 发送方获取接收方的公钥。 2. 使用该公钥对文件的原始数据进行加密。这个过程中,...

    C#RSA加密DEMO

    RSA基于大数因子分解的困难性,即找到两个大素数的乘积相当容易,但反过来分解一个大合数成其素因数却非常困难。因此,公钥可以公开,任何人都可以使用它来加密信息,而私钥则必须保密,用于解密信息。 在C#中,...

    基于矩阵的图像加密算法代码,能够实现加密、解密,速度快效率高。

    矩阵加密算法通常使用大素数矩阵作为秘钥,以确保其安全性。这些矩阵可以是乘法同余类矩阵、希尔矩阵或其他具有特定性质的矩阵。 3. **加密运算**:使用秘钥矩阵对图像矩阵进行操作,这可能包括矩阵的乘法、加法、...

    RSA.rar_RSA加密文件_RSA加密解密和_rsa加密算法_对称 加密文件_对称加密

    1. **密钥生成**:首先,选择两个大素数p和q,计算它们的乘积n=p*q。接着,计算欧拉函数φ(n)=(p-1)*(q-1)。选取一个与φ(n)互质的整数e作为公钥的加密指数,通常e取为65537。然后,找到一个满足1φ(n)且(e*d) mod ...

    RSA.rar_RSA算法Python_python实现加密_rsa加密_加密_加密解密

    在RSA算法中,加密是通过将明文乘以公钥的模幂运算实现的,即C = M^e mod n,其中M是明文,C是密文,e是公钥的一部分,n是两个大素数的乘积。解密则相反,使用私钥d进行,即M = C^d mod n,从而恢复原始明文。在...

    密码学实验_对称加密算法DES_非对称加密算法RSA.pdf

    1. **生成密钥对**:随机选取两个素数p和q,计算n=p*q和欧拉函数值f(n)。选择一个满足条件的e和计算对应的d,使得e和d互为模f(n)的逆元。 2. **加密**:使用公钥(N,e),将明文m通过幂次取模计算密文c=m^e mod n。 3...

    RSA加密算法在VB中的实现.rar_RSA VB_VB RSA_rsa加密算法_vb rsa_vb 加密

    RSA加密算法是公钥密码学领域的一个里程碑,它由Ron Rivest、Adi Shamir和Leonard Adleman在1977年提出,因此得名RSA。这种算法基于大整数因子分解的困难性,使得它在信息安全领域被广泛用于数据加密和数字签名。在...

Global site tag (gtag.js) - Google Analytics