public class MixEncAndDec {
private static int mixedEncrypt(byte[] plaintext, byte[] ciphertext) {
int plaintext_size = plaintext.length;
int finalLen = plaintext_size * 2;
Random random = new Random();
for (int i = 0; i < plaintext_size; i += 4) {
Integer number = random.nextInt(900000) + 100000;
long rdm = Long.valueOf(System.currentTimeMillis() + number);
if (i >= plaintext_size || i + 4 >= plaintext_size) {
for (int j = 0; j < plaintext_size - i; j++) {
ciphertext[i + j] = (byte) ((rdm >> ((3 - j) * 8)) & 0xff);
}
}
ciphertext[i + 0] = (byte) ((rdm >> 24) & 0xff);
ciphertext[i + 1] = (byte) ((rdm >> 16) & 0xff);
ciphertext[i + 2] = (byte) ((rdm >> 8) & 0xff);
ciphertext[i + 3] = (byte) ((rdm) & 0xff);
}
for (int i = finalLen - plaintext_size, j = 0; i < finalLen; ++i, ++j) {
ciphertext[i] = (byte) (plaintext[j] ^ ciphertext[j]);
}
return 0;
}
private static int mixedDecrypt(byte[] ciphertext, byte[] plaintext) {
int plaintext_size = plaintext.length;
for (int i = 0; i < plaintext_size; i++) {
plaintext[i] = (byte) (ciphertext[(plaintext_size * 2) - plaintext_size + i] ^ ciphertext[i]);
}
return 0;
}
static int reoder(byte[] src, byte[] dst) {
int i, len = src.length;
int m = 0;
int n = len - 1;
for (i = 0; i < len; i++) {
if (i % 3 == 0) {
dst[m++] = src[i];
} else {
dst[n--] = src[i];
}
}
return 0;
}
static int recover(byte[] src, byte[] dst) {
int i, len = src.length;
int m = 0;
int n = len - 1;
for (i = 0; i < len; i++) {
if (i % 3 == 0) {
dst[i] = src[m++];
} else {
dst[i] = src[n--];
}
}
return 0;
}
public static void main(String[] args) {
byte[] str = "OPEN AI LAB".getBytes();
int enclen = str.length * 2;
byte[] enc = new byte[enclen];
mixedEncrypt(str, enc);
byte[] finalEnc = new byte[enclen];
reoder(enc, finalEnc);
byte[] plainEnc = new byte[finalEnc.length];
recover(finalEnc, plainEnc);
byte[] plaintext = new byte[plainEnc.length / 2];
mixedDecrypt(plainEnc, plaintext);
System.out.println(new String(plaintext));
}
}
转载为:翔哥的《https://blog.csdn.net/qq_19734597/category_7757646.html》