به بررسی عمیق ما در دام رمزنگاری جاوا خوش آمدید! در آخرین مقاله خود، مشکل تصادفی ضعیف را بررسی کردیم. امروز، یکی دیگر از اشتباهات رایج امنیتی را که حتی توسعه دهندگان باتجربه مرتکب شده اند، روشن می کنیم: کلیدهای رمزگذاری سخت کد شده. ما بررسی خواهیم کرد که چرا این عمل خطرناک است و چگونه می توان راه حل ایمن تر را پیاده سازی کرد.
دام: کلیدهای رمزگذاری سخت
بیایید با یک سناریوی مشترک شروع کنیم. شما در حال ساخت یک برنامه Spring هستید که نیاز به رمزگذاری اطلاعات حساس کاربر دارد. به نفع زمان وسوسه شدید و چیزی شبیه زیر نوشتید:
import javax.crypto.Cipher;
import javax.crypto.spec.SecretKeySpec;
import java.util.Base64;
@Service
public class UserDataEncryptionService {
private static final String ENCRYPTION_KEY = "MySecretKey12345"; // DON'T DO THIS!
private static final String ALGORITHM = "AES";
public String encryptData(String data) throws Exception {
SecretKeySpec keySpec = new SecretKeySpec(ENCRYPTION_KEY.getBytes(), ALGORITHM);
Cipher cipher = Cipher.getInstance(ALGORITHM);
cipher.init(Cipher.ENCRYPT_MODE, keySpec);
byte[] encryptedBytes = cipher.doFinal(data.getBytes());
return Base64.getEncoder().encodeToString(encryptedBytes);
}
public String...