如何实现FPE的循环遍历方法,以使输出加密字符串的长度与输入字符串的长度相同?

时间:2019-02-08 12:31:12

标签: java cryptography aes encryption-symmetric javax.crypto

按照格式保留加密(FPE)中的循环行走方法概念,如下所示 假设M是我们想要的字符串输出长度,X是纯文本

AES(X)=Y
if (Y>M) {
    AES(X)
}

我们执行此循环,直到获得所需的输出长度。但是,当我尝试通过在AES加密代码之上编写循环来执行此操作时,加密字符串的输出长度每次都在增加。我想念什么?

main()
{
    String strToEncrypt = "012345678";
    final String strPssword = "QWERTYUIOPASDFGH";
    AES.setKey(strPssword);

    for(int i=0;i<20;i++)
        {
          AES.encrypt(strToEncrypt.trim());
          System.out.println("String to Encrypt: " + strToEncrypt); 
          System.out.println("Encrypted: " + AES.getEncryptedString());
          strToEncrypt = AES.getEncryptedString();
        }
}

我得到的结果是

String to Encrypt: 012345678
Encrypted: /a+WAzyVsLRkWXtQu1RFrw==

String to Encrypt: /a+WAzyVsLRkWXtQu1RFrw==
Encrypted: K2DVyvglFSGncoTvl7al00cPzKdRyGkW/YTOTqXp3sk=

String to Encrypt: K2DVyvglFSGncoTvl7al00cPzKdRyGkW/YTOTqXp3sk=
Encrypted: I7CBulv5XdEaSX55wFlXFHgtmwFZO6GZvmZ+OrH8jSRSga7NhdG6bYXEwR90YzSI

但是我要尝试的是经过一些迭代,输出的加密字符串长度应等于输入字符串“ 012345678”的长度

0 个答案:

没有答案