皮皮网

【软件下载整店源码】【矿机区块源码】【买点趋势指标源码】javasubstr源码

时间:2024-12-22 21:47:15 分类:休闲 来源:imchat聊天软件源码

1.java将70个字符进行分割
2.我想把java文件先加密然后打包,源码请高手指教怎么加密,源码有那种好的源码加密算法吗?
3.Java必修课判断String是否包含子串的四种方法及性能对比

javasubstr源码

java将70个字符进行分割

               // 测试字符串

               String source = "abcdef";

               // 规定 长度

               int needLength = ;

               // 优化的结果集。

               // 也可以直接 List<String> resultList = new ArrayList<String>();

               List<String> resultList = new ArrayList<String>(source.length()

                       % needLength + 1);

               

               String subStr;

               int endIndex = 0;

               

               while (source.length() > 0) {

                   // 判断截取的长度

                   endIndex = source.length() > needLength ? needLength : source

                           .length();

                   // 获得街区后的长度

                   subStr = source.substring(0, endIndex);

                   // 截取剩余的字符串

                   source = source.substring(endIndex);

                   resultList.add(subStr);

               }

               System.out.println(resultList);

我想把java文件先加密然后打包,请高手指教怎么加密,源码有那种好的源码加密算法吗?

       RSA算法非常简单,概述如下:

       找两素数p和q

       取n=p*q

       取t=(p-1)*(q-1)

       取任何一个数e,源码软件下载整店源码要求满足e<t并且e与t互素(就是最大公因数为1)

       取d*e%t==1

       这样最终得到三个数: n d e

       设消息为数M (M <n)

       设c=(M**d)%n就得到了加密后的消息c

       设m=(c**e)%n则 m == M,从而完成对c的源码解密。

       注:**表示次方,源码上面两式中的d和e可以互换。

       在对称加密中:

       n d两个数构成公钥,源码可以告诉别人;

       n e两个数构成私钥,源码e自己保留,源码不让任何人知道。源码矿机区块源码

       给别人发送的源码信息使用e加密,只要别人能用d解开就证明信息是源码由你发送的,构成了签名机制。源码

       别人给你发送信息时使用d加密,这样只有拥有e的你能够对其解密。

       rsa的安全性在于对于一个大数n,没有有效的方法能够将其分解

       从而在已知n d的情况下无法获得e;同样在已知n e的情况下无法

       求得d。

       <二>实践

       接下来我们来一个实践,看看实际的操作:

       找两个素数:

       p=

       q=

       这样

       n=p*q=

       t=(p-1)*(q-1)=

       取e=,满足e<t并且e和t互素

       用perl简单穷举可以获得满主 e*d%t ==1的数d:

       C:\Temp>perl -e "foreach $i (1..){ print($i),last if $i*%==1 }"

       

       即d=

       最终我们获得关键的

       n=

       d=

       e=

       取消息M=我们看看

       加密:

       c=M**d%n = **%

       用perl的大数计算来算一下:

       C:\Temp>perl -Mbigint -e "print **%"

       

       即用d对M加密后获得加密信息c=

       解密:

       我们可以用e来对加密后的c进行解密,还原M:

       m=c**e%n=**% :

       C:\Temp>perl -Mbigint -e "print **%"

       

       即用e对c解密后获得m= ,买点趋势指标源码 该值和原始信息M相等。

       <三>字符串加密

       把上面的过程集成一下我们就能实现一个对字符串加密解密的示例了。

       每次取字符串中的一个字符的ascii值作为M进行计算,其输出为加密后进制

       的数的字符串形式,按3字节表示,如F

       代码如下:

       #!/usr/bin/perl -w

       #RSA 计算过程学习程序编写的测试程序

       #watercloud -8-

       #

       use strict;

       use Math::BigInt;

       my %RSA_CORE = (n=>,e=>,d=>); #p=,q=

       my $N=new Math::BigInt($RSA_CORE{ n});

       my $E=new Math::BigInt($RSA_CORE{ e});

       my $D=new Math::BigInt($RSA_CORE{ d});

       print "N=$N D=$D E=$E\n";

       sub RSA_ENCRYPT

       {

       my $r_mess = shift @_;

       my ($c,$i,$M,$C,$cmess);

       for($i=0;$i < length($$r_mess);$i++)

       {

       $c=ord(substr($$r_mess,$i,1));

       $M=Math::BigInt->new($c);

       $C=$M->copy(); $C->bmodpow($D,$N);

       $c=sprintf "%X",$C;

       $cmess.=$c;

       }

       return \$cmess;

       }

       sub RSA_DECRYPT

       {

       my $r_mess = shift @_;

       my ($c,$i,$M,$C,$dmess);

       for($i=0;$i < length($$r_mess);$i+=3)

       {

       $c=substr($$r_mess,$i,3);

       $c=hex($c);

       $M=Math::BigInt->new($c);

       $C=$M->copy(); $C->bmodpow($E,$N);

       $c=chr($C);

       $dmess.=$c;

       }

       return \$dmess;

       }

       my $mess="RSA 娃哈哈哈~~~";

       $mess=$ARGV[0] if @ARGV >= 1;

       print "原始串:",$mess,"\n";

       my $r_cmess = RSA_ENCRYPT(\$mess);

       print "加密串:",$$r_cmess,"\n";

       my $r_dmess = RSA_DECRYPT($r_cmess);

       print "解密串:",$$r_dmess,"\n";

       #EOF

       测试一下:

       C:\Temp>perl rsa-test.pl

       N= D= E=

       原始串:RSA 娃哈哈哈~~~

       加密串:5CB6CD6BCAAAA0AAA0AAA6CACACA4

       解密串:RSA 娃哈哈哈~~~

       C:\Temp>perl rsa-test.pl 安全焦点(xfocus)

       N= D= E=

       原始串:安全焦点(xfocus)

       加密串:ECF0AE0AADD7BADCFDCDB

       解密串:安全焦点(xfocus)

       <四>提高

       前面已经提到,rsa的安全来源于n足够大,我们测试中使用的n是非常小的,根本不能保障安全性,

       我们可以通过RSAKit、RSATool之类的工具获得足够大的N 及D E。

       通过工具,源码资本投资字节我们获得位的N及D E来测试一下:

       n=0xCDFCDEBEBBBBCEECC2BCE7B5FCDFBEC3AFD

       BDCDED9BDFCB3C4CAFADDFC7A6BFDADEDBC4FF9CCFD4CBB

       DECBCAB5DB9EE5AD2D7BE7ABFBEDDD2EDCCAED7E2

       BC

       d=0x

       e=0xEAACDE1E8E3D7DCF9CEFEFE8CEBBBBCBA9DADDCC

       4C5DBEECA8CEC3BAFEB9EABDBABEAFF2

       C4DD8B1CCA9D8B4B7A3C9EEFFF3AAFCDDA1DCABEABDAD2B

       

       设原始信息

       M=0x

       完成这么大数字的计算依赖于大数运算库,用perl来运算非常简单:

       A) 用d对M进行加密如下:

       c=M**d%n :

       C:\Temp>perl -Mbigint -e " $x=Math::BigInt->bmodpow(0x

       , 0x, 0xCDFCDEBEBBBBCEECC2BCE7B5F

       CDFBEC3AFDBDCDED9BDFCB3C4CAFADDFC7A6BFDADEDBC4F0

       F9CCFD4CBBDECBCAB5DB9EE5AD2D7BE7ABFBEDD6

       D2EDCCAED7E2BC);print $x->as_hex"

       0xbbececd7cabacfccbbd8abdea8dbdbd

       bf3a2f7c5f5aa1defafa8eed1d4cc4bebc0a1dcecaa6b

       fa3bec0cbfd8adadbc5e8bedaddd2acdeab

       fc3f6d

       即用d对M加密后信息为:

       c=0xbbececd7cabacfccbbd8abdea8dbdbd

       bf3a2f7c5f5aa1defafa8eed1d4cc4bebc0a1dcecaa6b

       fa3bec0cbfd8adadbc5e8bedaddd2acdeab

       fc3f6d

       B) 用e对c进行解密如下:

       m=c**e%n :

       C:\Temp>perl -Mbigint -e " $x=Math::BigInt->bmodpow(0xbbececd7cab

       acfccbbd8abdea8dbdbdbf3a2f7c5f5aa1def3

       afa8eed1d4cc4bebc0a1dcecaa6bfa3bec0cb

       fd8adadbc5e8bedaddd2acdeabfc3f6d, 0xEA

       ACDE1E8E3D7DCF9CEFEFE8CEBBBBCBA9DADDCCC5D

       BEECA8CEC3BAFEB9EABDBABEAFF

       2C4DD8B1CCA9D8B4B7A3C9EEFFF3AAFCDDA1DCABEABDA

       D2B, 0xCDFCDEBEBBBBCEECC2BCE7B5FCDF

       BEC3AFDBDCDED9BDFCB3C4CAFADDFC7A6BFDADEDBC4FF9CCF

       D4CBBDECBCAB5DB9EE5AD2D7BE7ABFBEDD

       D2EDCCAED7E2BC);print $x->as_hex"

       0x

       (我的P4 1.6G的机器上计算了约5秒钟)

       得到用e解密后的m=0x == M

       C) RSA通常的实现

       RSA简洁幽雅,但计算速度比较慢,通常加密中并不是直接使用RSA 来对所有的信息进行加密,

       最常见的情况是随机产生一个对称加密的密钥,然后使用对称加密算法对信息加密,之后用

       RSA对刚才的加密密钥进行加密。

       最后需要说明的是,当前小于位的N已经被证明是不安全的

       自己使用中不要使用小于位的RSA,最好使用位的。

       ----------------------------------------------------------

       一个简单的题无止境源码RSA算法实现JAVA源代码:

       filename:RSA.java

       /

*

       * Created on Mar 3,

       

*

       * TODO To change the template for this generated file go to

       * Window - Preferences - Java - Code Style - Code Templates

       */

       import java.math.BigInteger;

       import java.io.InputStream;

       import java.io.OutputStream;

       import java.io.FileInputStream;

       import java.io.FileOutputStream;

       import java.io.FileNotFoundException;

       import java.io.IOException;

       import java.io.FileWriter;

       import java.io.FileReader;

       import java.io.BufferedReader;

       import java.util.StringTokenizer;

       /

**

       * @author Steve

       

*

       * TODO To change the template for this generated type comment go to

       * Window - Preferences - Java - Code Style - Code Templates

       */

       public class RSA {

       /

**

       * BigInteger.ZERO

       */

       private static final BigInteger ZERO = BigInteger.ZERO;

       /

**

       * BigInteger.ONE

       */

       private static final BigInteger ONE = BigInteger.ONE;

       /

**

       * Pseudo BigInteger.TWO

       */

       private static final BigInteger TWO = new BigInteger("2");

       private BigInteger myKey;

       private BigInteger myMod;

       private int blockSize;

       public RSA (BigInteger key, BigInteger n, int b) {

       myKey = key;

       myMod = n;

       blockSize = b;

       }

       public void encodeFile (String filename) {

       byte[] bytes = new byte[blockSize / 8 + 1];

       byte[] temp;

       int tempLen;

       InputStream is = null;

       FileWriter writer = null;

       try {

       is = new FileInputStream(filename);

       writer = new FileWriter(filename + ".enc");

       }

       catch (FileNotFoundException e1){

       System.out.println("File not found: " + filename);

       }

       catch (IOException e1){

       System.out.println("File not found: " + filename + ".enc");

       }

       /

**

       * Write encoded message to 'filename'.enc

       */

       try {

       while ((tempLen = is.read(bytes, 1, blockSize / 8)) > 0) {

       for (int i = tempLen + 1; i < bytes.length; ++i) {

       bytes[i] = 0;

       }

       writer.write(encodeDecode(new BigInteger(bytes)) + " ");

       }

       }

       catch (IOException e1) {

       System.out.println("error writing to file");

       }

       /

**

       * Close input stream and file writer

       */

       try {

       is.close();

       writer.close();

       }

       catch (IOException e1) {

       System.out.println("Error closing file.");

       }

       }

       public void decodeFile (String filename) {

       FileReader reader = null;

       OutputStream os = null;

       try {

       reader = new FileReader(filename);

       os = new FileOutputStream(filename.replaceAll(".enc", ".dec"));

       }

       catch (FileNotFoundException e1) {

       if (reader == null)

       System.out.println("File not found: " + filename);

       else

       System.out.println("File not found: " + filename.replaceAll(".enc", "dec"));

       }

       BufferedReader br = new BufferedReader(reader);

       int offset;

       byte[] temp, toFile;

       StringTokenizer st = null;

       try {

       while (br.ready()) {

       st = new StringTokenizer(br.readLine());

       while (st.hasMoreTokens()){

       toFile = encodeDecode(new BigInteger(st.nextToken())).toByteArray();

       System.out.println(toFile.length + " x " + (blockSize / 8));

       if (toFile[0] == 0 && toFile.length != (blockSize / 8)) {

       temp = new byte[blockSize / 8];

       offset = temp.length - toFile.length;

       for (int i = toFile.length - 1; (i <= 0) && ((i + offset) <= 0); --i) {

       temp[i + offset] = toFile[i];

       }

       toFile = temp;

       }

       /*if (toFile.length != ((blockSize / 8) + 1)){

       temp = new byte[(blockSize / 8) + 1];

       System.out.println(toFile.length + " x " + temp.length);

       for (int i = 1; i < temp.length; i++) {

       temp[i] = toFile[i - 1];

       }

       toFile = temp;

       }

       else

       System.out.println(toFile.length + " " + ((blockSize / 8) + 1));*/

       os.write(toFile);

       }

       }

       }

       catch (IOException e1) {

       System.out.println("Something went wrong");

       }

       /

**

       * close data streams

       */

       try {

       os.close();

       reader.close();

       }

       catch (IOException e1) {

       System.out.println("Error closing file.");

       }

       }

       /

**

       * Performs <tt>base</tt>^<sup><tt>pow</tt></sup> within the modular

       * domain of <tt>mod</tt>.

       

*

       * @param base the base to be raised

       * @param pow the power to which the base will be raisded

       * @param mod the modular domain over which to perform this operation

       * @return <tt>base</tt>^<sup><tt>pow</tt></sup> within the modular

       * domain of <tt>mod</tt>.

       */

       public BigInteger encodeDecode(BigInteger base) {

       BigInteger a = ONE;

       BigInteger s = base;

       BigInteger n = myKey;

       while (!n.equals(ZERO)) {

       if(!n.mod(TWO).equals(ZERO))

       a = a.multiply(s).mod(myMod);

       s = s.pow(2).mod(myMod);

       n = n.divide(TWO);

       }

       return a;

       }

       }

       在这里提供两个版本的RSA算法JAVA实现的代码下载:

       1. 来自于 /code.aspx?ID= 的RSA算法实现源代码包:

       /rsa/

       

参考资料:

/product/showarticle.asp?id=

Java必修课判断String是否包含子串的四种方法及性能对比

       判断一个字符串是否包含某个特定子串是常见的场景,比如判断一篇文章是否包含敏感词汇、判断日志是否有ERROR信息等。本文将介绍四种方法并进行性能测试。

       在String的函数中,提供了indexOf(subStr)方法,返回子串subStr第一次出现的位置,如果不存在则返回-1。例子如下:

       最直观判断的方法是contains(subStr),返回类型为boolean,如果包含返回true,不包含则返回false。例子如下:

       实际上,String的contains方法是通过调用indexOf方法来判断的,源码如下:

       通过强大的正则匹配来判断,虽然有点杀鸡用牛刀的感觉,但也不是不能用,例子如下:

       Apache的commons-lang3提供许多开箱即用的功能,StringUtils就提供了许多与字符串相关的功能,例子如下:

       我们使用JMH工具来对四种方法进行性能测试,Maven引入代码如下:

       测试代码如下:

       测试结果如下:

       最快的就是indexOf方法,其次是contains方法,二者应该没有实际区别,contains是调用indexOf来实现的。Apache的StringUtils为第三方库,相对慢一些。最慢的是使用了正则的Pattern的方法,这不难理解,正则引擎的匹配是比较耗性能的。

       本文介绍了判断一个字符串是否包含某个特定子串的四种方法,并通过性能测试进行了对比。其中性能最好的是String的indexOf方法和contains方法,建议使用contains方法,性能好,跟indexOf相比,更直观,更不容易犯错。毕竟让每个人时刻记住返回-1代表不存在也不是一件容易的事。

       但是,使用indexOf和contains方法都需要注意做判空处理,这时StringUtils的优势就体现出来了。

       总结,四种方法如下:

       indexOf(subStr):返回子串第一次出现的位置,不存在返回-1。

       contains(subStr):返回true或false,是否包含。

       Pattern匹配:使用正则匹配,相对耗性能。

       StringUtils.contains:Apache库提供,相对慢。

       性能测试结果显示,indexOf和contains方法最佳,建议使用contains方法。Apache库的StringUtils方法相对慢,正则匹配方法最慢。在使用方法时,注意处理空值问题。希望本文能帮助你更好地理解和使用这些方法。

copyright © 2016 powered by 皮皮网   sitemap