修正された Vigenere 暗号アルゴリズムを作成しましたが、問題が発生しています。を暗号化してString
から復号化すると、元のファイルが返されませんString
。私のソースコード:
public class ViganereEncryptionBase64 {
private char[] keys = new char[19];
int sizeKey = 0;
int cimin = 0;
final String MVEAs = " !\"#$%&'()=+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_'abcdefghijklmnopqrstuvwxyz{|}~";
public ViganereEncryptionBase64() {
String keys = "bangdollaMC08ITATS";
this.keys = keys.toCharArray();
}
public String encrypt(String toEncrypt) {
char charsToEncrypt[] = toEncrypt.toCharArray();
char encryptedChars[] = toEncrypt.toCharArray();
int i = 0;
while (i < encryptedChars.length) {
int sube = MVEAs.indexOf(charsToEncrypt[i]) + MVEAs.indexOf(keys[sizeKey]) + cimin;
sizeKey++;
if (sizeKey == keys.length)
sizeKey = 0;
encryptedChars[i] = MVEAs.charAt(Math.floorMod(sube, 95));
cimin = MVEAs.indexOf(encryptedChars[i]);
i += 1;
}
return String.valueOf(encryptedChars);
}
public String decrypt(String toDecrypt) {
char charsToDecrypt[] = toDecrypt.toCharArray();
char decryptedChars[] = toDecrypt.toCharArray();
int i = 0;
while (i < charsToDecrypt.length) {
int sube = MVEAs.indexOf(charsToDecrypt[i]) - MVEAs.indexOf(keys[sizeKey]) - cimin;
sizeKey++;
if (sizeKey == keys.length)
sizeKey = 0;
decryptedChars[i] = MVEAs.charAt(Math.floorMod(sube, 95));
cimin = MVEAs.indexOf(charsToDecrypt[i]);
i++;
}
return String.valueOf(decryptedChars);
}
}
この問題を説明する使用例は次のとおりです。
public static void main(String[] args) {
ViganereEncryptionBase64 viganere = new ViganereEncryptionBase64();
System.out.println("Result encryption: " + viganere.encrypt("<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">"));
viganere = new ViganereEncryptionBase64();
System.out.println("Result description: " + viganere.decrypt("~at,4X~<Cp|\"(>rdnds~1x_\\XTmN5T{irX-9DZv+opkhJLbT[x7Mk/'J&|p&A0qAMR_yh9|H#\\Y91/kKtQI,Su3Ik, p$@IH.c:Ue'Lj25X L#[3f8ql3U]oF"));
}
元の入力は"<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">"
その暗号化された結果は"~at,4X~<Cp|\"(>rdnds~1x_\\XTmN5T{irX-9DZv+opkhJLbT[x7Mk/'J&|p&A0qAMR_yh9|H#\\Y91/kKtQI,Su3Ik, p$@IH.c:Ue'Lj25X L#[3f8ql3U]oF"
そして、復号化された結果は"<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">"
これは違います。