DES(CBC)モードを使用するため、簡単に解読できます。 DESの有効なキーサイズは56ビットのみです。したがって、鍵と鍵は、(PBKDF1)鍵の導出に関係なく強制的に強制することができます。
MD5は、PBKDF1内で使用されているときには問題がありませんが、パスワードには十分なエントロピーが含まれていれば問題ありません。
可能であれば、PBKDF2とAESを使用してパスワードベースの暗号化(PBE)にアップグレードする必要があります。 PBEは通常CBCモードの暗号化を使用するため、トランスポートプロトコルには適していません。
それは確かに、いくつか/あなたのAndroidベンダーは将来のある時点でPBEWithMD5AndDESはを削除する可能性がある
package com.example.siman.friend_pro;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.security.InvalidAlgorithmParameterException;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
import java.security.spec.AlgorithmParameterSpec;
import java.security.spec.InvalidKeySpecException;
import java.security.spec.KeySpec;
import javax.crypto.BadPaddingException;
import javax.crypto.Cipher;
import javax.crypto.IllegalBlockSizeException;
import javax.crypto.NoSuchPaddingException;
import javax.crypto.SecretKey;
import javax.crypto.SecretKeyFactory;
import javax.crypto.spec.PBEKeySpec;
import javax.crypto.spec.PBEParameterSpec;
import static javax.crypto.Cipher.DECRYPT_MODE;
import static javax.crypto.Cipher.ENCRYPT_MODE;
import static javax.crypto.Cipher.getInstance;
public class Encryptor4j
{
private static byte[] salt = {
(byte) 0xA9, (byte) 0x9B, (byte) 0xC8, (byte) 0x32,
(byte) 0x56, (byte) 0x35, (byte) 0xE3, (byte) 0x03
};
private static Cipher ecipher;
private static Cipher dcipher;
private static String Property = "youkey";
private static int iterationCount = 19;
public static String encrypt(String Text)
{
String returnvalue=null;
try {
returnvalue = Encryptor4j.form1(Text);
}
catch (NoSuchAlgorithmException | InvalidKeySpecException |
NoSuchPaddingException | InvalidKeyException |
InvalidAlgorithmParameterException | IllegalBlockSizeException |
BadPaddingException | IOException e) {
e.printStackTrace();
}
return returnvalue;
}
public static String decrypt(String Text)
{
String returnvalue=null;
try {
returnvalue = Encryptor4j.form2(Text);
}
catch (NoSuchAlgorithmException | InvalidKeySpecException |
NoSuchPaddingException | InvalidKeyException |
InvalidAlgorithmParameterException | IllegalBlockSizeException |
BadPaddingException | IOException e) {
e.printStackTrace();
}
return returnvalue;
}
private static String form1(String Text)
throws NoSuchAlgorithmException, InvalidKeySpecException, NoSuchPaddingException, InvalidKeyException, InvalidAlgorithmParameterException, UnsupportedEncodingException, IllegalBlockSizeException, BadPaddingException
{
//Key generation for enc and desc
KeySpec keySpec = new PBEKeySpec(Property.toCharArray(), salt, iterationCount);
SecretKey key = SecretKeyFactory.getInstance("PBEWithMD5AndDES").generateSecret(keySpec);
// Prepare the parameter to the ciphers
AlgorithmParameterSpec paramSpec = new PBEParameterSpec(salt, iterationCount);
//Enc process
ecipher = getInstance(key.getAlgorithm());
ecipher.init(ENCRYPT_MODE, key, paramSpec);
String charSet = "UTF-8";
byte[] in = Text.getBytes(charSet);
byte[] out = ecipher.doFinal(in);
String encStr = new String(android.util.Base64.encode(out,0));
//String encStr = new String(Base64.getEncoder().encode(out));
return encStr;
}
private static String form2(String Text)
throws NoSuchAlgorithmException, InvalidKeySpecException, NoSuchPaddingException, InvalidKeyException, InvalidAlgorithmParameterException, UnsupportedEncodingException, IllegalBlockSizeException, BadPaddingException, IOException
{
//Key generation for enc and desc
KeySpec keySpec = new PBEKeySpec(Property.toCharArray(), salt, iterationCount);
SecretKey key = SecretKeyFactory.getInstance("PBEWithMD5AndDES").generateSecret(keySpec);
// Prepare the parameter to the ciphers
AlgorithmParameterSpec paramSpec = new PBEParameterSpec(salt, iterationCount);
//Decryption process; same key will be used for decr
dcipher = getInstance(key.getAlgorithm());
dcipher.init(DECRYPT_MODE, key, paramSpec);
//byte[] enc = Base64.getDecoder().decode(encryptedText);
byte[] enc = android.util.Base64.decode(Text.getBytes(),0);
byte[] utf8 = dcipher.doFinal(enc);
String charSet = "UTF-8";
String plainStr = new String(utf8, charSet);
return plainStr;
}
}
...あなたはそれをインポートし、それを使用し、完全な作業です。今日ではDESとMD5を使用すべきではないと考えています。残念ながら、私はPBEWithMD5AndDESを維持するためにGoogleから各ベンダーに要件があるとは思わないので、この回答は本当にお答えできません。 –
将来どのようなベンダーが何をするのか、誰がどのように言うことができますか? @ArtjomB。 –
ああ、私は知っている、と私は理解するように、すべてのアルゴリズムは将来的に削除することができますので、Cipherを使うのは「安全」ではないのですか? –