首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使用密码和Java将12位十进制数字加密/解密成其他十进制数字?

如何使用密码和Java将12位十进制数字加密/解密成其他十进制数字?
EN

Stack Overflow用户
提问于 2009-05-13 14:55:10
回答 10查看 11.6K关注 0票数 1

我已经读过用Java加密整数使用密码短语使用DES加密了。

我所需要的只是一个简单的Encrypter,它将一个12位数字转换为一个12位数,并有以下约束:

  1. 加密必须依赖于密码(在应用程序的整个生命周期内它将是常量的),而不是其他的。
  2. 映射必须是1-1 (没有散列和多个输入提供相同的输出,反之亦然)。
  3. 映射不能在不同VM之间或VM启动时更改(就像重新启动Java时一样,实用程序应该给出相同的映射,这意味着它必须完全依赖于所提供的密码)。
  4. 以0开头的数字不是有效的12位数字(而且输入数字不会以0开头)。
  5. 不能猜测密钥/密码。例如,运行具有多个输入的实用程序并分析输出,不应该允许人们猜测键/pwd/散列或其他什么。
  6. 所有输入都是12位数,小于12位素数(这意味着我们可以使用模运算)。

在浏览了文献之后,我随身带着这段代码。

代码语言:javascript
运行
复制
public void mytestSimple(long code, String password) throws Exception {
    SecretKey key = new SecretKeySpec(password.getBytes(), "DES");
    Cipher ecipher = Cipher.getInstance("DES");
    ecipher.init(Cipher.ENCRYPT_MODE, key);
    System.out.println(ecipher.getOutputSize(8));

    byte[] encrypted = ecipher.doFinal(numberToBytes(code));
    System.out.println(encrypted + "--" + encrypted.length);

    Cipher dcipher = Cipher.getInstance("DES");
    dcipher.init(Cipher.DECRYPT_MODE, key);
    byte[] decrypted = dcipher.doFinal(encrypted);
    System.out.println(bytesToNumber(decrypted) + "--" + decrypted.length);
}

public void testSimple() throws Exception {
    mytestSimple(981762654986L, "password");
}

我遇到了一些问题

  1. 如何将16字节转换为12位数字。
  2. 保持1-1地图。
  3. 在多个VM调用之间保持相同的加密/解密。

*我在下面添加的答复*

我已经添加了一个答案,这是一个从标准Java密钥生成逻辑中提取的40位RSA。我还得处理边缘的案子。我将接受这个答案,并投票给"Tadmas“,我认为他会带我找到答案。有人能告诉我我的算法是否会弱/可攻击吗?

EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/858476

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档