https://en.wikipedia.org/wiki/One-time_pad
public static String crypt(String string, String keyString) {
// convert secret text to byte array
byte[] bytes = string != null ? string.getBytes() : new byte[0];
int size = bytes != null ? bytes.length : 0;
final byte[] encoded = new byte[size];
final byte[] key = keyString != null ? keyString.getBytes() : new byte[0];
// loop on input bytes
for (int i = 0; i < size; i++) {
// shift key index
// (we assume key can be smaller or equal if larger then adjust)
int keyi = i >= keySize ? size % (keySize-1) : i;
// pad
encoded[i] = (byte) (bytes[i] ^ key[keyi]);
}
return new String(encoded);
}
public static void test(String string, String keyString) {
String encrypt = crypt(string, keyString);
String decrypt = crypt(encrypt, keyString);
assert(string.equals(decrypt));
}
test("test","1234");
test("test","123");
附言。您可以通过拉起字符串并用字节替换来重构方法
public static byte[] crypt(byte[] bytes, byte[] key) {
int size = bytes != null ? bytes.length : 0;
final byte[] encoded = new byte[size];
int keySize = key != null ? key.length : 0;
// loop on input bytes
for (int i = 0; i < size; i++) {
// shift key index (assuming key <= bytes)
int keyi = i >= keySize ? size % (keySize-1) : i;
// pad
encoded[i] = (byte) (bytes[i] ^ key[keyi]);
}
return encoded;
}