Tôi đang phát triển ứng dụng Android và tôi cần sử dụng java Signature
class để xác thực dữ liệu.SHA256 có chữ ký RSA trả về các kết quả đầu ra khác nhau trên các thiết bị Android khác nhau
Trên mỗi thiết bị Android, tôi có thể ký dữ liệu và xác minh chữ ký của thiết bị. Tuy nhiên, với một đoạn dữ liệu nhất định để ký, một mô đun xác định, số mũ riêng xác định và số mũ công khai xác định, kết quả đầu ra của chữ ký của tôi khác nhau, tùy thuộc vào thiết bị. Tôi đã thử với nhiều thiết bị và tôi có được chữ ký tương tự cho Android 3.2 và 3.2.1, nhưng khác biệt đối với thiết bị Android 2.2.x.
Tôi tính toán chữ ký này từ các trường không đổi mà tôi đã tạo trước đó bằng cách sử dụng KeyFactory
với RSA trong dự án java. Các keyize là 2048bit.
Dưới đây là trích dẫn mã tôi sử dụng cho chữ ký và xác minh hóa đơn.
public byte[] signData(byte[] data, PrivateKey privateKey) throws ... {
Signature signature = Signature.getInstance("SHA256withRSA");
signature.initSign(privateKey);
signature.update(data);
return signature.sign();
}
public boolean verifyData(byte[] data, byte[] sigBytes, PublicKey publicKey) throws ... {
Signature signature = Signature.getInstance("SHA256withRSA");
signature.initVerify(publicKey);
signature.update(data);
return signature.verify(sigBytes);
}
Nếu tôi không nhầm, chữ ký sử dụng SHA256 với RSA là xác định. Vậy làm thế nào tôi có thể giải thích một hành vi như vậy? Một câu hỏi thú vị khác, làm thế nào tôi có thể làm cho các thiết bị chéo đó hoạt động, tức là chữ ký sẽ giống nhau, không có thiết bị nào tôi sử dụng?
Cảm ơn bạn trước, Franck!
Mã có vẻ đúng, mặc dù việc dán trình xử lý lỗi hầu như không cần thiết. Đảm bảo khóa và dữ liệu được ký là giống nhau. –
@SevaAlekseyev Vâng, tôi chắc chắn tất cả các yếu tố đầu vào của hệ thống của tôi đều giống nhau. Tôi cứng mã hóa chúng như là cuối cùng tĩnh, trong một lớp học, có chứa các hằng số. Tôi không liên kết các giá trị hằng số một cách thuận tiện. – franckysnow
Gỡ lỗi từng bước. Đầu tiên, tính toán băm SHA256 trên tất cả các nền tảng đó và so sánh chúng. –