加密加密的最佳方法是啥?

Posted

技术标签:

【中文标题】加密加密的最佳方法是啥?【英文标题】:What is best approach to encrypting an encryption?加密加密的最佳方法是什么? 【发布时间】:2016-02-15 20:13:40 【问题描述】:

对于我的 CPSC 课程,我需要使用凯撒密码制作加密代码。就这样完成了。下一部分是获取加密消息并循环使用要添加到加密消息中的 secretKey。例如,如果我加密“你好!”使用 13 的移位,它将变成“Uryyb!”。然后我必须将“U”移一,将“r”移三,将“y”移一,等等......这将变成“Vuzbc!”我在一个初学者班,所以我不知道所有很酷的提示和技巧。我知道的唯一可能的解决方案是获取凯撒密码的结果,并以某种方式索引要添加到结果中的密钥。

这是我到目前为止的代码:

public class Cipher  

private int secretKey;
private int superSecretKey;


public static void main(String [] args)
 
    Cipher cipher = new Cipher(1);


public Cipher(int myKey)  
    secretKey = myKey;



public String caesarEncrpyt (String s) 
    String r = "";

    for(int i = 0; i < s.length(); i++) 

        char c = (char) (s.charAt(i));
        if(Character.isLetter(c)) 
            if (Character.isUpperCase(c)) 
                r += (char) ('A' + (c - 'A' + secretKey) % 26);
            
            else 
                r += (char) ('a' + (c - 'a' + secretKey) % 26);
            
        
            else 
            r += c;
        
    
    return r;


public String caesarDecrypt (String s) 
    String r = "";

    for(int i = 0; i < s.length(); i++) 

        char c = (char) (s.charAt(i));
        if(Character.isLetter(c)) 
            if (Character.isUpperCase(c)) 
                r += (char) ('A' + (c - 'A' - secretKey) % 26);
            
            else 
                r += (char) ('a' + (c - 'a' - secretKey) % 26);
            
        
            else 
            r += c;
        
    
    return r;


public String augustusEncrypt (String s) 
    String r = "";

    for(int i = 0; i < s.length(); i++) 

        char c = (char) (s.charAt(i));
        if(Character.isLetter(c)) 
            if (Character.isUpperCase(c)) 
                r += (char) ('A' + (c - 'A' + secretKey) % 26);
            
            else 
                r += (char) ('a' + (c - 'a' + secretKey) % 26);
            
        
            else 
            r += c;
        
    
    return r;

augustusEncrypt 是 caesarEncrypt 的复制和粘贴。我一直在移动一些东西,希望有一个解决方案。提前致谢!

编辑:我可能没有正确解释这一点,如果您有问题,我会在这里。

【问题讨论】:

一般来说,加密加密文本是不好的做法。它不太可能使任何事情变得更安全,并且取决于所使用的系统实际上可能会使事情变得更弱。 (显然与这种特殊情况无关,尽管这种双重加密显然没有什么比这更安全的了) 当你说“循环密钥”时,你的意思是因为密钥是 13,你要把它变成 1, 3,如果密钥是 482213,那么循环将是 4,8,2,2,1,3? 有点难以解释。如果我的 secretKey 是 13,我必须轮换“你好!”我会在 H 中加 1,然后在 e 中加 3。然后重复回到 1 添加到 L。 【参考方案1】:

编写一个函数,调用它toDigits,它将接受一个int(或long)并返回一个与输入数字对应的int数组。 toDigits(13)=>1,3 和 toDigits(4834)=>4,8,3,4 等

然后编写一个函数encryptChar,获取一个char和一个int,并用该int加密char。 (encryptChar('e', 1)=>'f', encryptChar('a',28)=>c, etc)

然后您可以遍历消息的字符和此数组中的数字,将值传递给 encryptChar 并使用结果来组装您的加密消息。在一种松散的伪代码中:

fn encryptMessage(message, key):
  key_array = toDigits(key)
  output = ""
  for i in length (message):
    output.append(encryptChar(message[i], key_array[i % length(key_array)]))

【讨论】:

【参考方案2】:

除了加密的最佳实践和约定,解决方案很简单。

当我们离开字母表时,您的字母 A-Z 和 a-z 已经执行了正确的循环,并且您相信您可以正常工作。您需要做的就是在循环之前添加 1 个

应该是这样的(警告:未经测试):

('A' + ((c+1) - 'A' + secretKey) % 26)

【讨论】:

以上是关于加密加密的最佳方法是啥?的主要内容,如果未能解决你的问题,请参考以下文章

加密长用户输入以使我无法查看数据库并立即看到每个人的写作的最佳方法是啥?

在不使用 mysql 服务器资源的情况下加密数据的最佳方法是啥?使用 CFB 模式的 mcrypt 是使用 php 的最佳方式吗?

mysql 最新的密码哈希算法/数据加密是啥?

关于JS加密,这个是啥加密方式?如何进行加密和解密

用php加密大文件的最佳方法

保存加密密钥的正确方法是啥?