τα στοιχεία επικοινωνίας μου
Ταχυδρομείο[email protected]
2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
Σε έργα, συναντάμε συχνά σενάρια όπου το front-end Android χρησιμοποιεί το δημόσιο κλειδί που παρέχεται από το back-end για την κρυπτογράφηση δεδομένων.Πρέπει να δώσετε προσοχή στο backend της Javajava.util.Base64
Προεπιλεγμένο πρότυπο Base64 και Androidandroid.util.Base64
είναι διαφορετικά.
Επιπλέον, το πρότυπο αλγόριθμου RSA απαιτεί επίσης ρητή συμφωνία μεταξύ του μπροστινού και του πίσω άκρου.
Δείγμα κώδικα:
import android.util.Base64;
import java.nio.charset.StandardCharsets;
import java.security.KeyFactory;
import java.security.KeyPair;
import java.security.spec.X509EncodedKeySpec;
public class RSACrypto {
public static final String PUB_KEY = "xxxxxxxxxxxxxx你的后端公钥";
public static PublicKey getPublicKey() throws Exception {
byte[] keyBytes = Base64.decode(PUB_KEY, Base64.DEFAULT);
X509EncodedKeySpec keySpec = new X509EncodedKeySpec(keyBytes);
KeyFactory keyFactory = KeyFactory.getInstance("RSA");
return keyFactory.generatePublic(keySpec);
}
public static String publicEncrypt(PublicKey publicKey, String encrypted) throws Exception {
Cipher cipher = Cipher.getInstance("RSA/None/PKCS1Padding");
cipher.init(Cipher.ENCRYPT_MODE, publicKey);
byte[] data = cipher.doFinal(encrypted.getBytes(StandardCharsets.UTF_8));
return Base64.encodeToString(data, Base64.NO_WRAP);
}
}
Μεταξύ αυτών, το αποτέλεσμα κρυπτογράφησης κωδικοποιείται με Base64.NO_WRAP, το δημόσιο κλειδί αποκωδικοποιείται με Base64.DEFAULT και ο αλγόριθμος κρυπτογράφησης είναι RSA/None/PKCS1Padding. Υπάρχουν πολλά δείγματα κωδικών κρυπτογράφησης RSA για Android που δεν αναφέρονται στο Διαδίκτυο Υπάρχουν επίσης προβλήματα με τον κώδικα που δημιουργείται από το GPT, ο οποίος καταγράφεται εδώ.