当前位置: 首页 > 知识库问答 >
问题:

java中的简单加密-无密钥/密码

丌官向荣
2023-03-14

假设我有一个IP地址,192.168.1.1

我想让我的程序基于这个IP地址创建一个随机的单字字符串,它可以很容易地解密,而无需密钥或密码或额外的安全措施。

例如。

我进入192.168.1.1

程序将其转换为AzlQrEHCSD或其他一些随机字符串

我在程序中输入这个字符串

它被转换回192.168.1.1

有没有简单的算法可以在不生成密钥或其他密码的情况下做到这一点?我知道密钥和密码是加密和解密的必要条件,但我的场景不需要它。

共有3个答案

满才
2023-03-14

您可以将ip 字符串编码为< code>base64,反转字符串,然后使用Caesar密码:

public String easeyEncrypt(String ip) {
   String b64encoded = Base64.getEncoder().encode(ip);

   // Reverse the string
   String reverse = new StringBuffer(b64encoded).reverse().toString();

   StringBuilder tmp = new StringBuilder();
   final int OFFSET = 4;
   for (int i = 0; i < reverse.length(); i++) {
      tmp.append(reverse.charAt(i) + OFFSET);
   }
   return tmp.toString();
}

要解密,请倒退:

public String easeyDecrypt(String secret) {
   StringBuilder tmp = new StringBuilder();
   final int OFFSET = 4;
   for (int i = 0; i < secret.length(); i++) {
      tmp.append(secret.charAt(i) - OFFSET);
   }

   String reversed = new StringBuffer(tmp.toString()).reverse().toString();
   return Base64.encode(reversed);
}
戚俊人
2023-03-14

几乎相同的hiGuardio解决方案,但有很多修复,使其工作,以下代码测试和工作,因为higuo不工作得很好,就像字符进入数字,当你反转它得到单个数字和损坏一切:

public String caesarCipherEncrypt(String plain) {
   String b64encoded = Base64.getEncoder().encodeToString(plain.getBytes());

   // Reverse the string
   String reverse = new StringBuffer(b64encoded).reverse().toString();

   StringBuilder tmp = new StringBuilder();
   final int OFFSET = 4;
   for (int i = 0; i < reverse.length(); i++) {
      tmp.append((char)(reverse.charAt(i) + OFFSET));
   }
   return tmp.toString();
}

要向后解加密过程:

public String caesarCipherDecrypte(String secret) {
   StringBuilder tmp = new StringBuilder();
   final int OFFSET = 4;
   for (int i = 0; i < secret.length(); i++) {
      tmp.append((char)(secret.charAt(i) - OFFSET));
   }

   String reversed = new StringBuffer(tmp.toString()).reverse().toString();
   return new String(Base64.getDecoder().decode(reversed));
}

我希望它有帮助。

郝永思
2023-03-14

我知道它过分了,但我会使用jasypt库,因为它真的很容易使用。您所需要的只是随机种子来加密或解密。

以下是加密数据的源代码:

String seed = "ipNumber";
String myIpValue = "192.168.0.1";

StandardPBEStringEncryptor encryptor = new StandardPBEStringEncryptor();
encryptor.setPassword(seed);
String encrypted= encryptor.encrypt(myIpValue);

对于数据解密:

StandardPBEStringEncryptor encryptor = new StandardPBEStringEncryptor();
encryptor.setPassword(seed);

String decrypted = encryptor.decrypt(encrypted);

或者您可以将字符串编码或解码为base64,示例如下:base64 Java编码和解码字符串

 类似资料:
  • 问题内容: 我正在使用静态方法在类中使用javax.crypto加密和解密消息。我有2个使用cipher和dcipher的静态方法,以完成他们应该做的事情,我需要初始化一些变量(也是静态的)。但是,当我尝试使用它时,我得到的InvalidKeyException与我提供给ecipher.init(…)的参数。我找不到原因。这是代码: 问题答案: AES-256(和AES-192)要求为JRE安装无

  • 我用过这个命令 生成密钥库。它工作正常,但从我读到的内容来看,这个命令还应该提示您输入密钥密码(而不是存储密码)?我从来没有收到过这样的提示。我能跑 查看密钥库的内容。钥匙似乎就在那里。。。正确的别名在那里。在哪里获取/设置特定别名的密码? 我有一个key.properties在Android目录 在build.gradle我有: 当我试图生成一个发布版本时,我得到了 我想它可能与keyPassw

  • 我有这样的情况,我使用OpenSSL生成了一个公钥/私钥对,供gdcmanon使用,遵循他们网站上列出的说明。具体地说,我使用以下命令为gdcmanon生成密钥 然后,我就能够按照他们的指示,加密一个文件,使用 这在c.init(cipher.decrypt_mode,key)行失败; 我已经为Java6安装了JCE(我正在使用)。我不知道我做错了什么。谁能给我指出正确的方向吗。 谢谢

  • 问题内容: 我正在尝试使用Java Cryto在Java中进行简单的AES加密,然后可以使用OpenSSL在ObjectiveC中对其进行解密。 因为我没有在ObjectiveC方面进行操作,所以我想使用openSSL命令行确保它可以正常工作,但是我总是会收到“错误的魔术数字” 这是我的Java代码 现在可以按预期运行,文件“ test-encrypted.txt”确实已加密,并且“ test-d

  • 这是可能的还是加密必须共享和使用相同的密钥? 主要目的就是这样。 我将有两个客户端可以发送和接收加密数据到彼此。

  • 这是我的密码 抱歉,如果我的代码一团糟。