文字列を取得してバイトに変換し、XORしてbase64を適用する単純な暗号化関数があります。
JAVA:
String key = "1234";
public String encrypt(String plainText) throws Exception {
byte [] input = plainText.getBytes("UTF8");
byte [] output = new byte[input.length];
for(int i=0; i<input.length; i++)
output[i] = ((byte)(input[i] ^ key.charAt(i % key.length())));
String utf8 = new String(output);
return Utils.encode(utf8);
}
次に、それをファイルに保存し、次の復号化方法を使用してC#の別のアプリケーションで開きます。
C#:
string key="1234";
public string Decrypt(string CipherText)
{
var decoded = System.Convert.FromBase64String(CipherText);
var dexored = xor(decoded, key);
return Encoding.UTF8.GetString(dexored);
}
byte[] xor(byte[] text, string key)
{
byte[] res = new byte[text.Length];
for (int c = 0; c < text.Length; c++)
{
res[c] = (byte)((uint)text[c] ^ (uint)key[c % key.Length]);
}
return res;
}
問題は、ěščřžýáíのようなアクセントのある文字がデコードに失敗することです。
問題がどの部分から発生しているのかを判断する方法や、問題を見つける方法を知っていますか?それはUTF-8と関係があるように私には見えます。
より良い暗号化のための提案は必要ありません。私はすでにAESを使用していますが、パフォーマンスの問題のためにxoredbase64に切り替えたいと思います。
ありがとうございました。