zoukankan      html  css  js  c++  java
  • java实现维吉尼亚加密/解密算法

    加密算法程序:

    public class mtoc
    {

    //输入明文和密钥,用输入的密钥对明文进行加密
    public static void main(String[] args)
    {int i;
     char[] c=new char[100];
     char[] k1=new char[100];

    //输入
    System.out.print("enter a mingwen string:");
     String m=MyInput.readString();
    System.out.print("enter a key string:");
     String k=MyInput.readString();

    //构造密钥对照表                                                                                                    

    for(i=0;i<k.length();i++)
    {
    if(k.charAt(i)>='a'&&k.charAt(i)<='z')
    k1[i]=(char)(k.charAt(i)-97);
    if(k.charAt(i)>='A'&&k.charAt(i)<='Z')
    k1[i]=(char)(k.charAt(i)-65);
    }

    //加密

    for(i=0;i<m.length();i++)
    {
    if(m.charAt(i)>='a'&&m.charAt(i)<='z')
    c[i]=(char)((m.charAt(i)-97+k1[i%k.length()])%26+97);
    if(m.charAt(i)>='A'&&m.charAt(i)<='Z')
    c[i]=(char)((m.charAt(i)-65+k1[i%k.length()])%26+65);
    }

    //输出密文
    for(i=0;i<c.length;i++)
    System.out.print(c[i]);}

    }

    解密算法程序:

    public class ctom
    {

    //输入密文和密钥,用密钥对密文解密
    public static void main(String[] args)
    {int i;
    char[] m=new char[100];
    char[] k1=new char[100];

    //输入
    System.out.print("enter the miwen string:");
    String c=MyInput.readString();
    System.out.print("enter the key string:");
    String k=MyInput.readString();

    //构造密钥对照表
    for(i=0;i<k.length();i++)
    {
    if(k.charAt(i)>='a'&&k.charAt(i)<='z')
    k1[i]=(char)(k.charAt(i)-97);
    if(k.charAt(i)>='A'&&k.charAt(i)<='Z')
    k1[i]=(char)(k.charAt(i)-65);
    }

    //解密

    for(i=0;i<c.length();i++)
    {
    if(c.charAt(i)>='a'&&c.charAt(i)<='z')
    m[i]=(char)((c.charAt(i)-97-k1[i%k.length()]+26)%26+97);
    if(c.charAt(i)>='A'&&c.charAt(i)<='Z')
    m[i]=(char)((c.charAt(i)-65-k1[i%k.length()]+26)%26+65);
    }

    //输出明文
    for(i=0;i<m.length;i++)
    System.out.print(m[i]);}

    }

    需要用到的MyInput.java类:

    // MyInput.java: Contain the methods for reading int, double, and
    // string values from the keyboard
    import java.io.*;

    public class MyInput
    {
      // Read a string from the keyboard
      public static String readString()
      {
        BufferedReader br
          = new BufferedReader(new InputStreamReader(System.in), 1);

        // Declare and initialize the string
        String string = "";

        // Get the string from the keyboard
        try
        {
          string = br.readLine();
        }
        catch (IOException ex)
        {
          System.out.println(ex);
        }

        // Return the string obtained from the keyboard
        return string;
      }

      // Read an int value from the keyboard
      public static int readInt()
      {
        return Integer.parseInt(readString());
      }

      // Read a double value from the keyboard
      public static double readDouble()
      {
        return Double.parseDouble(readString());
      }

      // Read a byte value from the keyboard
      public static byte readByte()
      {
        return Byte.parseByte(readString());
      }

      // Read a short value from the keyboard
      public static short readShort()
      {
        return Short.parseShort(readString());
      }

      // Read a long value from the keyboard
      public static long readLong()
      {
        return Long.parseLong(readString());
      }

      // Read a float value from the keyboard
      public static float readFloat()
      {
        return Float.parseFloat(readString());
      }
    }

    加密算法程序:

    public class mtoc
    {

    //输入明文和密钥,用输入的密钥对明文进行加密
    public static void main(String[] args)
    {int i;
     char[] c=new char[100];
     char[] k1=new char[100];

    //输入
    System.out.print("enter a mingwen string:");
     String m=MyInput.readString();
    System.out.print("enter a key string:");
     String k=MyInput.readString();

    //构造密钥对照表                                                                                                    

    for(i=0;i<k.length();i++)
    {
    if(k.charAt(i)>='a'&&k.charAt(i)<='z')
    k1[i]=(char)(k.charAt(i)-97);
    if(k.charAt(i)>='A'&&k.charAt(i)<='Z')
    k1[i]=(char)(k.charAt(i)-65);
    }

    //加密

    for(i=0;i<m.length();i++)
    {
    if(m.charAt(i)>='a'&&m.charAt(i)<='z')
    c[i]=(char)((m.charAt(i)-97+k1[i%k.length()])%26+97);
    if(m.charAt(i)>='A'&&m.charAt(i)<='Z')
    c[i]=(char)((m.charAt(i)-65+k1[i%k.length()])%26+65);
    }

    //输出密文
    for(i=0;i<c.length;i++)
    System.out.print(c[i]);}

    }

    解密算法程序:

    public class ctom
    {

    //输入密文和密钥,用密钥对密文解密
    public static void main(String[] args)
    {int i;
    char[] m=new char[100];
    char[] k1=new char[100];

    //输入
    System.out.print("enter the miwen string:");
    String c=MyInput.readString();
    System.out.print("enter the key string:");
    String k=MyInput.readString();

    //构造密钥对照表
    for(i=0;i<k.length();i++)
    {
    if(k.charAt(i)>='a'&&k.charAt(i)<='z')
    k1[i]=(char)(k.charAt(i)-97);
    if(k.charAt(i)>='A'&&k.charAt(i)<='Z')
    k1[i]=(char)(k.charAt(i)-65);
    }

    //解密

    for(i=0;i<c.length();i++)
    {
    if(c.charAt(i)>='a'&&c.charAt(i)<='z')
    m[i]=(char)((c.charAt(i)-97-k1[i%k.length()]+26)%26+97);
    if(c.charAt(i)>='A'&&c.charAt(i)<='Z')
    m[i]=(char)((c.charAt(i)-65-k1[i%k.length()]+26)%26+65);
    }

    //输出明文
    for(i=0;i<m.length;i++)
    System.out.print(m[i]);}

    }

    需要用到的MyInput.java类:

    // MyInput.java: Contain the methods for reading int, double, and
    // string values from the keyboard
    import java.io.*;

    public class MyInput
    {
      // Read a string from the keyboard
      public static String readString()
      {
        BufferedReader br
          = new BufferedReader(new InputStreamReader(System.in), 1);

        // Declare and initialize the string
        String string = "";

        // Get the string from the keyboard
        try
        {
          string = br.readLine();
        }
        catch (IOException ex)
        {
          System.out.println(ex);
        }

        // Return the string obtained from the keyboard
        return string;
      }

      // Read an int value from the keyboard
      public static int readInt()
      {
        return Integer.parseInt(readString());
      }

      // Read a double value from the keyboard
      public static double readDouble()
      {
        return Double.parseDouble(readString());
      }

      // Read a byte value from the keyboard
      public static byte readByte()
      {
        return Byte.parseByte(readString());
      }

      // Read a short value from the keyboard
      public static short readShort()
      {
        return Short.parseShort(readString());
      }

      // Read a long value from the keyboard
      public static long readLong()
      {
        return Long.parseLong(readString());
      }

      // Read a float value from the keyboard
      public static float readFloat()
      {
        return Float.parseFloat(readString());
      }
    }

  • 相关阅读:
    在IIS上启用Gzip压缩(HTTP压缩)
    跨数据库服务器查询和跨表更新
    GOOGLE高级搜索的秘籍
    NET中的规范标准注释(二) -- 创建帮助文档入门篇
    NET中的规范标准注释(一) -- XML注释标签讲解
    如何取出word文档里的图片
    System帐户!我使用你登陆
    横竖两个数字塔的效果BAT批处理怎么写?
    用批处理修改日期,然后在改回来
    根据日期计算星期几----蔡勒(Zeller)公式推导
  • 原文地址:https://www.cnblogs.com/xfiver/p/1743265.html
Copyright © 2011-2022 走看看