Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 多级加解密算法的时间复杂度_Java_Algorithm_Encryption_Rsa_Time Complexity - Fatal编程技术网

Java 多级加解密算法的时间复杂度

Java 多级加解密算法的时间复杂度,java,algorithm,encryption,rsa,time-complexity,Java,Algorithm,Encryption,Rsa,Time Complexity,在我的项目中,我通过多级算法提供了“加密和解密” 为此,我使用了RSA和3DES。现在我想计算它的时间复杂度,以便进行性能分析。我在这里有点困惑。如何准确地计算它或者它的时间复杂度是多少 下面是算法 助手类 class Helper{ public Cipher dcipher,ecipher; public Helper(String passPhrase){ byte[] salt = { (byte)0xA9, (byte)0x9B, (byte)0

在我的项目中,我通过多级算法提供了“加密和解密”

为此,我使用了RSA和3DES。现在我想计算它的时间复杂度,以便进行性能分析。我在这里有点困惑。如何准确地计算它或者它的时间复杂度是多少

下面是算法

助手类

class Helper{  
 public Cipher dcipher,ecipher;  
 public Helper(String passPhrase){  
    byte[] salt = 
      {  (byte)0xA9, (byte)0x9B, (byte)0xC8, (byte)0x32,  
         (byte)0x56, (byte)0x34, (byte)0xE3, (byte)0x03  
      };  
    int iterationCount = 19;  
    try {    
          KeySpec keySpec = new PBEKeySpec(passPhrase.toCharArray(), salt,                  
                    iterationCount);  
          SecretKey key =                                
              SecretKeyFactory.getInstance("PBEWithMD5AndDES").generateSecret(keySpec);  
          ecipher = Cipher.getInstance(key.getAlgorithm());  
          dcipher = Cipher.getInstance(key.getAlgorithm());  
          AlgorithmParameterSpec paramSpec = new PBEParameterSpec(salt,
                                       iterationCount);  
          ecipher.init(Cipher.ENCRYPT_MODE, key, paramSpec);  
          dcipher.init(Cipher.DECRYPT_MODE, key, paramSpec);  
    } 
    catch(Exception e){ } 
}  
@SuppressWarnings("unused")  
protected String encrypt(String str){  
        try{  
          byte[] utf8 = str.getBytes("UTF8");  
          byte[] enc = ecipher.doFinal(utf8);  
          return new sun.misc.BASE64Encoder().encode(enc);  
        } 
        catch (Exception e) {   } 
        return null;  
}      
// Decrpt password     
//To decrypt the encryted password  
protected String decrypt(String str) {  
  Cipher dcipher = null;  
  try{  
        byte[] salt = {(byte)0xA9, (byte)0x9B, (byte)0xC8, (byte)0x32,(byte)0x56, 
                       (byte)0x34, (byte)0xE3, (byte)0x03};  
        int iterationCount = 19;  
      try{   
        String passPhrase="";  
        KeySpec keySpec = new PBEKeySpec(passPhrase.toCharArray(), salt,
                        iterationCount);  
        SecretKey key = 
              SecretKeyFactory.getInstance("PBEWithMD5AndDES").generateSecret(keySpec);            
        dcipher = Cipher.getInstance(key.getAlgorithm());  
        // Prepare the parameters to the cipthers   
            AlgorithmParameterSpec paramSpec = new PBEParameterSpec(salt, 
                               iterationCount);  
        dcipher.init(Cipher.DECRYPT_MODE, key, paramSpec);  
      }   
  catch (Exception e) { 
            System.out.println("EXCEPTION: InvalidAlgorithmParameterException");  
      }  
      byte[] dec = new sun.misc.BASE64Decoder().decodeBuffer(str);  
      // Decrypt  
      byte[] utf8 = dcipher.doFinal(dec);  
      // Decode using utf-8  
      return new String(utf8, "UTF8");  
   }  
   catch (BadPaddingException e) {  
   } catch (IllegalBlockSizeException e) {  
   } catch (UnsupportedEncodingException e) {  
   } catch (IOException e){  
}  
return null;  
}  
public String Encrypt()
{

    try
    {
        KeyPairGenerator kpg=KeyPairGenerator.getInstance("RSA");
        kpg.initialize(512);//initialize key pairs to 512 bits ,you can also take 1024 or 2048 bits
        kp=kpg.genKeyPair();
        PublicKey publi=kp.getPublic();
        Cipher cipher = Cipher.getInstance("RSA");
        cipher.init(Cipher.ENCRYPT_MODE, publi);
        byte[]src=srci.getBytes();//converting source data into byte array
        cipherData = cipher.doFinal(src);//use this method to finally encrypt data
        srco=new String(cipherData);//converting byte array into string
    }
    catch(Exception e)
    {

    }
        return srco;
}
public String Decrypt(String cipherdata)
    {
        try
        {

        PrivateKey privatei=kp.getPrivate();//Generating private key
        Cipher cipheri=Cipher.getInstance("RSA");//Intializing 2nd instance of Cipher class
        cipheri.init(Cipher.DECRYPT_MODE, privatei);//Setting to decrypt_mode
        byte[] cipherDat = cipheri.doFinal(cipherData);//Finally decrypting data
        decryptdata=new String(cipherDat);
        }
        catch(Exception e)
        {
            System.out.println(e.getMessage());
        }
        return decryptdata;
}
public static void main(String args[])
{
    String odata = "abcd";
    String encdata2;
    String decrypt2;
    String decrypt1;
    MultilevelEnc r = new MultilevelEnc(odata);
    String encdata = r.Encrypt(); // RSA Algo Encryption        
    Helper h = new Helper("");
    encdata2 = h.encrypt(encdata);  // 3Des Algo Encryption

    decrypt2 = h.decrypt(encdata2); // 3Des Decryption
    decrypt1 = r.Decrypt(decrypt2);  // RSA Decryption
}
多级课程

class Helper{  
 public Cipher dcipher,ecipher;  
 public Helper(String passPhrase){  
    byte[] salt = 
      {  (byte)0xA9, (byte)0x9B, (byte)0xC8, (byte)0x32,  
         (byte)0x56, (byte)0x34, (byte)0xE3, (byte)0x03  
      };  
    int iterationCount = 19;  
    try {    
          KeySpec keySpec = new PBEKeySpec(passPhrase.toCharArray(), salt,                  
                    iterationCount);  
          SecretKey key =                                
              SecretKeyFactory.getInstance("PBEWithMD5AndDES").generateSecret(keySpec);  
          ecipher = Cipher.getInstance(key.getAlgorithm());  
          dcipher = Cipher.getInstance(key.getAlgorithm());  
          AlgorithmParameterSpec paramSpec = new PBEParameterSpec(salt,
                                       iterationCount);  
          ecipher.init(Cipher.ENCRYPT_MODE, key, paramSpec);  
          dcipher.init(Cipher.DECRYPT_MODE, key, paramSpec);  
    } 
    catch(Exception e){ } 
}  
@SuppressWarnings("unused")  
protected String encrypt(String str){  
        try{  
          byte[] utf8 = str.getBytes("UTF8");  
          byte[] enc = ecipher.doFinal(utf8);  
          return new sun.misc.BASE64Encoder().encode(enc);  
        } 
        catch (Exception e) {   } 
        return null;  
}      
// Decrpt password     
//To decrypt the encryted password  
protected String decrypt(String str) {  
  Cipher dcipher = null;  
  try{  
        byte[] salt = {(byte)0xA9, (byte)0x9B, (byte)0xC8, (byte)0x32,(byte)0x56, 
                       (byte)0x34, (byte)0xE3, (byte)0x03};  
        int iterationCount = 19;  
      try{   
        String passPhrase="";  
        KeySpec keySpec = new PBEKeySpec(passPhrase.toCharArray(), salt,
                        iterationCount);  
        SecretKey key = 
              SecretKeyFactory.getInstance("PBEWithMD5AndDES").generateSecret(keySpec);            
        dcipher = Cipher.getInstance(key.getAlgorithm());  
        // Prepare the parameters to the cipthers   
            AlgorithmParameterSpec paramSpec = new PBEParameterSpec(salt, 
                               iterationCount);  
        dcipher.init(Cipher.DECRYPT_MODE, key, paramSpec);  
      }   
  catch (Exception e) { 
            System.out.println("EXCEPTION: InvalidAlgorithmParameterException");  
      }  
      byte[] dec = new sun.misc.BASE64Decoder().decodeBuffer(str);  
      // Decrypt  
      byte[] utf8 = dcipher.doFinal(dec);  
      // Decode using utf-8  
      return new String(utf8, "UTF8");  
   }  
   catch (BadPaddingException e) {  
   } catch (IllegalBlockSizeException e) {  
   } catch (UnsupportedEncodingException e) {  
   } catch (IOException e){  
}  
return null;  
}  
public String Encrypt()
{

    try
    {
        KeyPairGenerator kpg=KeyPairGenerator.getInstance("RSA");
        kpg.initialize(512);//initialize key pairs to 512 bits ,you can also take 1024 or 2048 bits
        kp=kpg.genKeyPair();
        PublicKey publi=kp.getPublic();
        Cipher cipher = Cipher.getInstance("RSA");
        cipher.init(Cipher.ENCRYPT_MODE, publi);
        byte[]src=srci.getBytes();//converting source data into byte array
        cipherData = cipher.doFinal(src);//use this method to finally encrypt data
        srco=new String(cipherData);//converting byte array into string
    }
    catch(Exception e)
    {

    }
        return srco;
}
public String Decrypt(String cipherdata)
    {
        try
        {

        PrivateKey privatei=kp.getPrivate();//Generating private key
        Cipher cipheri=Cipher.getInstance("RSA");//Intializing 2nd instance of Cipher class
        cipheri.init(Cipher.DECRYPT_MODE, privatei);//Setting to decrypt_mode
        byte[] cipherDat = cipheri.doFinal(cipherData);//Finally decrypting data
        decryptdata=new String(cipherDat);
        }
        catch(Exception e)
        {
            System.out.println(e.getMessage());
        }
        return decryptdata;
}
public static void main(String args[])
{
    String odata = "abcd";
    String encdata2;
    String decrypt2;
    String decrypt1;
    MultilevelEnc r = new MultilevelEnc(odata);
    String encdata = r.Encrypt(); // RSA Algo Encryption        
    Helper h = new Helper("");
    encdata2 = h.encrypt(encdata);  // 3Des Algo Encryption

    decrypt2 = h.decrypt(encdata2); // 3Des Decryption
    decrypt1 = r.Decrypt(decrypt2);  // RSA Decryption
}
主类

class Helper{  
 public Cipher dcipher,ecipher;  
 public Helper(String passPhrase){  
    byte[] salt = 
      {  (byte)0xA9, (byte)0x9B, (byte)0xC8, (byte)0x32,  
         (byte)0x56, (byte)0x34, (byte)0xE3, (byte)0x03  
      };  
    int iterationCount = 19;  
    try {    
          KeySpec keySpec = new PBEKeySpec(passPhrase.toCharArray(), salt,                  
                    iterationCount);  
          SecretKey key =                                
              SecretKeyFactory.getInstance("PBEWithMD5AndDES").generateSecret(keySpec);  
          ecipher = Cipher.getInstance(key.getAlgorithm());  
          dcipher = Cipher.getInstance(key.getAlgorithm());  
          AlgorithmParameterSpec paramSpec = new PBEParameterSpec(salt,
                                       iterationCount);  
          ecipher.init(Cipher.ENCRYPT_MODE, key, paramSpec);  
          dcipher.init(Cipher.DECRYPT_MODE, key, paramSpec);  
    } 
    catch(Exception e){ } 
}  
@SuppressWarnings("unused")  
protected String encrypt(String str){  
        try{  
          byte[] utf8 = str.getBytes("UTF8");  
          byte[] enc = ecipher.doFinal(utf8);  
          return new sun.misc.BASE64Encoder().encode(enc);  
        } 
        catch (Exception e) {   } 
        return null;  
}      
// Decrpt password     
//To decrypt the encryted password  
protected String decrypt(String str) {  
  Cipher dcipher = null;  
  try{  
        byte[] salt = {(byte)0xA9, (byte)0x9B, (byte)0xC8, (byte)0x32,(byte)0x56, 
                       (byte)0x34, (byte)0xE3, (byte)0x03};  
        int iterationCount = 19;  
      try{   
        String passPhrase="";  
        KeySpec keySpec = new PBEKeySpec(passPhrase.toCharArray(), salt,
                        iterationCount);  
        SecretKey key = 
              SecretKeyFactory.getInstance("PBEWithMD5AndDES").generateSecret(keySpec);            
        dcipher = Cipher.getInstance(key.getAlgorithm());  
        // Prepare the parameters to the cipthers   
            AlgorithmParameterSpec paramSpec = new PBEParameterSpec(salt, 
                               iterationCount);  
        dcipher.init(Cipher.DECRYPT_MODE, key, paramSpec);  
      }   
  catch (Exception e) { 
            System.out.println("EXCEPTION: InvalidAlgorithmParameterException");  
      }  
      byte[] dec = new sun.misc.BASE64Decoder().decodeBuffer(str);  
      // Decrypt  
      byte[] utf8 = dcipher.doFinal(dec);  
      // Decode using utf-8  
      return new String(utf8, "UTF8");  
   }  
   catch (BadPaddingException e) {  
   } catch (IllegalBlockSizeException e) {  
   } catch (UnsupportedEncodingException e) {  
   } catch (IOException e){  
}  
return null;  
}  
public String Encrypt()
{

    try
    {
        KeyPairGenerator kpg=KeyPairGenerator.getInstance("RSA");
        kpg.initialize(512);//initialize key pairs to 512 bits ,you can also take 1024 or 2048 bits
        kp=kpg.genKeyPair();
        PublicKey publi=kp.getPublic();
        Cipher cipher = Cipher.getInstance("RSA");
        cipher.init(Cipher.ENCRYPT_MODE, publi);
        byte[]src=srci.getBytes();//converting source data into byte array
        cipherData = cipher.doFinal(src);//use this method to finally encrypt data
        srco=new String(cipherData);//converting byte array into string
    }
    catch(Exception e)
    {

    }
        return srco;
}
public String Decrypt(String cipherdata)
    {
        try
        {

        PrivateKey privatei=kp.getPrivate();//Generating private key
        Cipher cipheri=Cipher.getInstance("RSA");//Intializing 2nd instance of Cipher class
        cipheri.init(Cipher.DECRYPT_MODE, privatei);//Setting to decrypt_mode
        byte[] cipherDat = cipheri.doFinal(cipherData);//Finally decrypting data
        decryptdata=new String(cipherDat);
        }
        catch(Exception e)
        {
            System.out.println(e.getMessage());
        }
        return decryptdata;
}
public static void main(String args[])
{
    String odata = "abcd";
    String encdata2;
    String decrypt2;
    String decrypt1;
    MultilevelEnc r = new MultilevelEnc(odata);
    String encdata = r.Encrypt(); // RSA Algo Encryption        
    Helper h = new Helper("");
    encdata2 = h.encrypt(encdata);  // 3Des Algo Encryption

    decrypt2 = h.decrypt(encdata2); // 3Des Decryption
    decrypt1 = r.Decrypt(decrypt2);  // RSA Decryption
}

据我所知,现在所有的标准加密算法都是在对每个块进行快速预处理后,对输入的不同部分逐个应用块密码。每个分组密码在固定大小的输入上工作,因此具有运行时O(1)(尽管它可能是一个较大的O(1)),因此每个加密和解密算法的运行时应为O(n)(要处理的O(n)个块,每个块的时间为O(1))。您正在运行此密码的固定迭代次数,因此运行时也应该是O(n)

要粗略估计挂钟运行时间,可以使用
System.nanoTime
函数以纳秒为单位估计当前时间,然后执行操作,然后再次调用
System.nanoTime
再次获取当前时间。然后,差分会给出总运行时间


希望这有帮助

您需要提供更多的实现信息来解决问题。据我们所知,
multi-levelenc#Decrypt()
可以是从
O(n!)
O(n)
实现的任何地方……但是,您可以估计输入不同长度的输入的时间复杂度,并测量处理输入所需的时间。这里的“时间复杂度”是什么意思?你说的是大O符号还是挂钟时间,或者两者都有?两者都有。。。我必须在纸上把它们都展示出来@templatetypedefAlso,您显示的所有内容都是O(1),因为它不包含循环。任何复杂性度量都将基于您调用的操作。嘿,谢谢。。我明白你的意思。。