Tôi đang sử dụng lớp mã hóa trong Mục tiêu C cho ứng dụng iPhone của mình nhưng tôi đang cố gắng để có được cùng chức năng hoạt động trong JAVA từ ứng dụng Android của tôi. Mã mã hóa của tôi là bên dưới:Mã hóa chuỗi Java
NSString * _secret = @"password";
NSString * _key = @"1428324560542678";
StringEncryption *crypto = [[StringEncryption alloc] init];
NSData *_secretData = [_secret dataUsingEncoding:NSUTF8StringEncoding];
CCOptions padding = kCCOptionPKCS7Padding;
NSData *encryptedData = [crypto encrypt:_secretData key:[_key dataUsingEncoding:NSUTF8StringEncoding] padding:&padding];
Tôi đã cố gắng sao chép nó trong JAVA nhưng tôi nhận được một chuỗi khác khi mã hóa cùng một dữ liệu. Vì vậy, tôi đang làm một cái gì đó sai, nhưng tôi không thể tìm ra nó. Đây là mã JAVA của tôi:
byte[] key = "1428324560542678".getBytes();
Cipher c = null;
try {
c = Cipher.getInstance("AES/ECB/PKCS7Padding");
} catch (NoSuchAlgorithmException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (NoSuchPaddingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
SecretKeySpec k = new SecretKeySpec(key, "AES");
try {
c.init(Cipher.ENCRYPT_MODE, k);
} catch (InvalidKeyException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
EditText tv1passwordText = (EditText) findViewById(R.id.password);
String password = URLEncoder.encode(tv1passwordText.getText().toString(), "UTF-8");
byte[] encryptedData = c.doFinal(password.getBytes());
Mọi người có thể thấy tôi đang đi đâu không?
Dựa trên các ý kiến dưới đây tôi đã thêm getBytes nhưng chuỗi sản xuất vẫn còn khác nhau:
byte[] key = null;
try {
key = "1428324560542678".getBytes("UTF-8");
} catch (UnsupportedEncodingException e2) {
// TODO Auto-generated catch block
e2.printStackTrace();
}
Cipher c = null;
try {
c = Cipher.getInstance("AES/ECB/PKCS7Padding");
} catch (NoSuchAlgorithmException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (NoSuchPaddingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
SecretKeySpec k = new SecretKeySpec(key, "AES");
try {
c.init(Cipher.ENCRYPT_MODE, k);
} catch (InvalidKeyException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
EditText tv1passwordText = (EditText) findViewById(R.id.password);
byte[] password = tv1passwordText.getText().toString().getBytes("UTF-8");
byte[] encryptedData = c.doFinal(password);
Bạn cần phải xác định bộ ký tự trong 'getBytes()' nếu bạn muốn các chuỗi phù hợp. –