0

我在 Eclipse 中运行 Java,仅供参考。

我有明文,使用 Blowfish 加密并在另一端解密。我想添加一个时间戳,这样加密的文本每次对于相同的明文都是不同的。

如何将时间戳添加到 Java 中的河豚算法中,以便我可以在另一端解密它?

谢谢你。

这是我的加密代码:

import BlowfishJ.*;


public class EncryptBlowFishTest {
/**
 * @param args
 */
public static void main(String[] args) {

    long CBCIV = 0x0x765904567324590L;

    String pwd = "1234567890";
    int pwdLength = password.length();

    // generate key
            byte[] testkey = new byte[5];


            for (int i = 0; i < testkey.length; i++)
                testkey[i] = (byte) (i + 1);


    BlowfishCBC blowfishcbc = new BlowfishCBC(testkey, 0, testkey.length, CBCIV);

    byte[] tempBuffer = pwd.getBytes();

    // align to the next 8 byte border
            byte[] msgBuffer;
            int n = pwdLength & 7;

            if (n != 0) {
                msgBuffer = new byte[(pwdLength & (~7)) + 8];
                System.arraycopy(tempBuffer, 0, msgBuffer, 0, pwdLength);

                for (int i = pwdLength; i < msgBuffer.length; i++)
                    msgBuffer[i] = 0;
            }
            else {
                msgBuffer = new byte[pwdLength];
                System.arraycopy(tempBuffer, 0, msgBuffer, 0, pwdLength);
            }

            byte[] showCBCIV = new byte[BlowfishCBC.BLOCKSIZE];
            blowfishcbc.getCBCIV(showCBCIV, 0);

            blowfishcbc.encrypt(msgBuffer, 0, msgBuffer, 0, msgBuffer.length);

            String encryptedPwd = BinConverter.bytesToBinHex(msgBuffer);

            System.out.println(encryptedPwd);

    }
}
4

3 回答 3

3

将时间戳作为纯文本的第一部分,然后加密所有内容。

于 2012-09-14T21:11:38.133 回答
2

改为使用随机 IV。只需生成适当长度的随机字节序列并将其用作您的 IV。将未加密的 IV 与您的加密消息一起发送。

使用随机 IV 是一种标准做法 (PKCS#5)。

于 2012-09-14T21:16:03.290 回答
1

与 zmbq 类似,您可以System.currentTimeMillis()在加密之前简单地附加到文本。然后在解密时删除长。您可能希望使用分隔符使其更易于删除。

于 2012-09-14T21:21:19.777 回答