我们如何在不使用任何给定库(如Base64、AES等)的情况下用java创建自己的字符串编码解码或加密解密脚本?

我们如何在不使用任何给定库(如Base64、AES等)的情况下用java创建自己的字符串编码解码或加密解密脚本?,java,security,encryption,encoding,cryptography,Java,Security,Encryption,Encoding,Cryptography,我们如何在不使用任何给定库(如Base64、AES等)的情况下用java创建自己的字符串编码解码或加密解密脚本 根据我的客户要求,他希望用户可以决定用同一用户再次选择的字母/数字替换特定字母/数字。所以我想确认一下,有没有这样做的可能性?任何建议都将不胜感激 维护keyValue的HashMap将替换为要替换的值,只需使用简单函数更改字符串即可 import java.util.HashMap; import java.util.Map.Entry; public class Encrypt {

我们如何在不使用任何给定库(如Base64、AES等)的情况下用java创建自己的字符串编码解码或加密解密脚本


根据我的客户要求,他希望用户可以决定用同一用户再次选择的字母/数字替换特定字母/数字。所以我想确认一下,有没有这样做的可能性?任何建议都将不胜感激

维护keyValue的HashMap将替换为要替换的值,只需使用简单函数更改字符串即可

import java.util.HashMap;
import java.util.Map.Entry;
public class Encrypt {

/**
 * @param args
 */
static HashMap<String, String> hm = new HashMap();

public static void main(String[] args) {
    // TODO Auto-generated method stub
    hm.put("a", "b");   
    hm.put("b", "c");   
    hm.put("c", "d");   
    hm.put("d", "e");   
    hm.put("e", "f");   
    hm.put("f", "g");
    hm.put("g", "h");   
    hm.put("h", "i");   
    hm.put("i", "j");   
    hm.put("j", "k");   
    hm.put("k", "l");   
    hm.put("l", "m");
    hm.put("m", "n");   
    hm.put("1", "4");   
    hm.put("2", "3");   
    hm.put("3", "2");   
    hm.put("4", "1");   
    hm.put("5", "0");

    String input = "this is a simple text";
    String text = encode(input);
    System.out.println(text);
    System.out.println(decode(text));

}

private static String decode(String input) {
    // TODO Auto-generated method stub
    StringBuffer output = new StringBuffer();
    for(int i = 0; i < input.length(); i++)
    {
        String ch = input.charAt(i)+"";
        if(hm.containsValue(ch))
        {
            for (Entry<String, String> entry : hm.entrySet()) {
                if (entry.getValue().equals(ch)) {
                    output.append(entry.getKey());
                }
            }
        }
        else
        {
            output.append(ch);
        }
    }
    return output.toString();
}

private static String encode(String input) {
    // TODO Auto-generated method stub
    StringBuffer output = new StringBuffer();
    for(int i = 0; i < input.length(); i++)
    {
        String ch = input.charAt(i)+"";
        if(hm.containsKey(ch))
        {
            output.append(hm.get(ch));
        }
        else
        {
            output.append(ch);
        }
    }
    return output.toString();
}
}

编辑


这是不建议的,因为如果有人打破了顺序,他可以很容易地知道所有的文本

这是一个密码,任何安全性都不应被信任。@Seiyria,你能解释一下…为什么吗?维护一个键的哈希映射值被替换为一个值要替换的值,只需使用一个简单的函数更改字符串即可。@UmaKanth感谢你的建议,这样我们就可以进行编码/加密,完美……但解码/解密将如何进行?你能给我看一些示例代码吗……因为我还不是java高手!但是客户的要求让我很痛苦。谢谢你的支持…让我试试。非常感谢这与Vigenère密码具有相同或更低的安全性。如果这是可以接受的,那么你的客户必须仍然生活在文艺复兴时期。单替换密码被认为是经典密码是有原因的。我同意@maarteenbodewes,这很容易被破解。我不知道你的客户想要什么,但是DES,SHA被认为是最好的,实际上是不可能破解的。然而DES和SHA只是上个世纪的事,所以我们离现在越来越近了。现在是AES和SHA-2,使用经过身份验证的加密。SHA-3几乎是标准化的,但现在还没有理由切换。不,明确表示我也使用了其他的加密…比如在1级,数据将首先使用客户端指定的方法进行加密,然后在第二级使用其他加密方法。数据将存储在应用程序数据库中,之后在最后一级加密中,我将再次加密数据,然后将其保存到服务器数据库中。因此,它有3级数据保护。说到客户,我的客户对我们通常使用的加密方法不满意……他想要一些可以选择第一级加密的东西。