sách gpt4 ăn đã đi

Cơ chế chữ ký ứng dụng Android APK và phương pháp đọc chữ ký

In lại Tác giả: qq735679552 Thời gian cập nhật: 28-09-2022 22:32:09 28 4
mua khóa gpt4 giày nike

CFSDN nhấn mạnh vào giá trị tạo ra nguồn mở và chúng tôi cam kết xây dựng nền tảng chia sẻ tài nguyên để mọi nhân viên CNTT có thể tìm thấy thế giới tuyệt vời của bạn tại đây.

Bài viết trên blog CFSDN này về cơ chế chữ ký ứng dụng Android APK và phương pháp đọc chữ ký được tác giả sưu tầm và biên soạn. Nếu các bạn quan tâm đến bài viết này thì nhớ like nhé.

Những người bạn đã phát hành ứng dụng Android nên biết rằng việc phát hành APK Android cần có chữ ký. Cơ chế chữ ký đóng vai trò rất quan trọng trong các ứng dụng và framework Android. Ví dụ: hệ thống Android cấm cập nhật và cài đặt các APK có chữ ký không nhất quán; nếu ứng dụng cần sử dụng quyền của hệ thống thì phải đảm bảo rằng chữ ký APK nhất quán với chữ ký Framework, v.v.

Chữ ký là gì? Trước hết, chúng ta phải biết thông báo là gì. Thông báo đề cập đến giá trị Hash có độ dài cố định được tạo bằng cách sử dụng hàm Hash một chiều để tính toán dữ liệu. . Giá trị Hash được tạo bởi Md5 là số 128 bit, tức là 16 byte, có 32 ký tự theo ký hiệu thập lục phân. Giá trị Hash được tạo bởi Sha1 là số 160 bit, có 20 byte, có 40 ký tự. ký hiệu thập lục phân. Chúng ta không thể suy ra dữ liệu dùng để tính toán tóm tắt thông qua tóm tắt. Nếu dữ liệu bị sửa đổi, tóm tắt của nó chắc chắn sẽ thay đổi (trên thực tế, câu này không đúng nhưng rất khó để tìm ra dữ liệu khác nhau một cách chính xác và giá trị tóm tắt của chúng. ​​hoàn toàn giống nhau). Thông báo thường được sử dụng để xác minh tính toàn vẹn của dữ liệu. Nhiều trang web tải xuống sẽ liệt kê giá trị md5 hoặc giá trị sha1 của tệp đã tải xuống. Tóm tắt và chữ ký không liên quan gì đến nhau Tóm tắt và chữ ký thường bị nhầm lẫn trên mạng, điều này là sai. Chữ ký và chữ ký số là cùng một khái niệm. Nó có nghĩa là người gửi thông tin sử dụng khóa riêng của mình để mã hóa thông báo tóm tắt để tạo ra một chuỗi. Thuật toán mã hóa đảm bảo rằng những người khác không thể giả mạo chuỗi này. của thông tin. Một bằng chứng hiệu quả về tính xác thực của thông tin được gửi bởi tác giả. Những người gửi khác sử dụng khóa riêng của họ để mã hóa cùng một bản tóm tắt tin nhắn sẽ nhận được các chữ ký khác nhau. Người nhận chỉ có thể lấy bản tóm tắt tin nhắn bằng cách giải mã dữ liệu chữ ký bằng khóa chung tương ứng với khóa riêng mà người gửi sử dụng để ký, nếu không kết quả sẽ như vậy. không được chính xác. Chữ ký số là sự kết hợp giữa công nghệ mã hóa khóa bất đối xứng + công nghệ phân loại số. Công nghệ chữ ký số mã hóa thông tin tóm tắt bằng khóa riêng của người gửi và truyền nó đến người nhận cùng với văn bản gốc và khóa chung. Người nhận chỉ có thể sử dụng khóa chung của người gửi để giải mã bản tóm tắt tin nhắn được mã hóa. Sau đó, người nhận sử dụng hàm Hash tương tự để tạo bản tóm tắt tin nhắn cho văn bản gốc đã nhận và so sánh nó với bản tóm tắt tin nhắn đã được giải mã. Nếu chúng giống nhau thì thông tin nhận được là đầy đủ và không bị sửa đổi trong quá trình truyền tải; nếu khác nhau thì thông tin đó đã được sửa đổi nên chữ ký số có thể đảm bảo tính toàn vẹn của thông tin. Và vì chỉ người gửi mới có khóa riêng để mã hóa bản tóm tắt nên chúng ta có thể chắc chắn rằng tin nhắn phải được gửi bởi người gửi. Có một khái niệm khác cần được hiểu: chứng chỉ số. Chứng chỉ số là một tệp chứa thông tin về khóa chung và chủ sở hữu của nó được cơ quan cấp chứng chỉ ký điện tử. Định dạng của chứng chỉ kỹ thuật số thường áp dụng tiêu chuẩn quốc tế X.509V3. Chứng chỉ kỹ thuật số X.509 tiêu chuẩn có các nội dung sau: Thông tin về phiên bản chứng chỉ: 1) Số sê-ri chứng chỉ có một số sê-ri chứng chỉ duy nhất; thuật toán được sử dụng trong chứng chỉ; 3) Tên tổ chức cấp chứng chỉ, quy tắc đặt tên thường áp dụng định dạng X.500; 4) Thời hạn hiệu lực của chứng chỉ phổ biến thường sử dụng định dạng thời gian UTC và phạm vi thời gian của nó là 1950-2049; 5) Tên của chủ sở hữu chứng chỉ, quy tắc đặt tên thường sử dụng định dạng X.500; chìa khóa của người sở hữu chứng chỉ; 7) Chữ ký của cơ quan cấp chứng chỉ. CERT.RSA chứa chữ ký số và chứng chỉ kỹ thuật số của nhà phát triển. Chữ ký số trong CERT.RSA đề cập đến dữ liệu được mã hóa bằng khóa riêng của bản tóm tắt CERT.SF. Khi hệ thống Android cài đặt apk, nó sẽ tính toán bản tóm tắt của CERT.SF, sau đó sử dụng khóa chung trong CERT. .RSA để mã hóa bản tóm tắt trong CERT.RSA. Giải mã chữ ký số để có được bản tóm tắt. Bằng cách so sánh hai bản tóm tắt, bạn có thể biết liệu gói ứng dụng có chữ ký chính xác hay không. ký lại nó, nó sẽ được kiểm tra. Cần lưu ý rằng chứng chỉ của nền tảng Android là tự ký, có nghĩa là nó không cần phải do cơ quan có thẩm quyền cấp. Cơ quan cấp chứng chỉ số cũng giống như chủ sở hữu. Sau khi nhà phát triển tạo cặp khóa công khai và khóa riêng, anh ta không cần phải nộp cho cơ quan có thẩm quyền để thực hiện xác minh.

Đọc chữ ký đôi khi yêu cầu lấy thông tin chữ ký của một gói ứng dụng cụ thể (đã cài đặt hoặc chưa cài đặt), chẳng hạn như tự kiểm tra chương trình, kiểm tra bên thứ ba đáng tin cậy (thị trường ứng dụng) và cài đặt giới hạn hệ thống. có thể lấy được bằng API riêng của Java (chủ yếu là JarFile, JarEntry và Chứng chỉ). Một phương pháp khác là sử dụng API PackageParser ẩn của hệ thống để sử dụng API tương ứng thông qua phản chiếu. Tuy nhiên, do có quá nhiều phiên bản phân chia của hệ thống Android và có nhiều sửa đổi được thực hiện bởi các nhà sản xuất khác nhau nên phương pháp dựa vào sự phản chiếu để ẩn API không thể đảm bảo tính tương thích và tính linh hoạt. Do đó, nên sử dụng API riêng của JAVA để. có được nó: .

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
   /**
    * Đọc chữ ký từ APK
    * @param tập tin
    * @trở lại
    * @throws IOException
    */
   riêng tư tĩnh List getSignaturesFromApk(Tệp file) ném Ngoại lệ IO {
     Danh sách chữ ký= mới ArrayList();
     Tệp jar Tệp jar= mới JarFile(tệp);
     thử {
       JarEntry là=jarFile.getJarEntry( "AndroidManifest.xml" );
       byte [] đọcBộ đệm= mới byte [ 8192 ];
       Chứng chỉ[] certs=loadCertificates(jarFile, je, readBuffer);
       nếu như (chứng chỉ != vô giá trị ) {
         (Chứng chỉ c: certs) {
           Chuỗi sig=toCharsString(c.getEncoded());
           chữ ký.add(sig);
         }
       }
     } nắm lấy (Ngoại lệ cũ) {
     }
     trở lại chữ ký;
   }
 
  /**
    * Tải chữ ký
    * @param jarFile
    * @param là
    * @param đọcBộ đệm
    * @trở lại
    */
   riêng tư tĩnh Certificate[] loadCertificates(JarFile jarFile, JarEntry je, byte [] đọcBộ đệm) {
     thử {
       InputStream là=jarFile.getInputStream(je);
       trong khi (là.đọc(đọcBuffer, 0 , readBuffer.length) != - 1 ) {
       }
       is.close();
       trở lại là != vô giá trị ? je.getCertificates() : vô giá trị ;
     } nắm lấy (IOException e) {
     }
     trở lại vô giá trị ;
   }
 
/**
    * Chuyển đổi chữ ký thành một chuỗi hiển thị
    * @param sigByte
    * @trở lại
    */
   riêng tư tĩnh Chuỗi thành chuỗi ký tự( byte [] sigByte) {
     byte [] sig=sigBytes;
     cuối cùng số nguyên N=chiều dài chuẩn;
     cuối cùng số nguyên N2=N * 2 ;
     char [] văn bản= mới char [N2];
     ( số nguyên j= 0 ; j < N; j++) {
       byte v=sig[j];
       số nguyên d=(v >> 4 ) & 0xf ;
       văn bản[j * 2 ]=( char )(d >= 10 ? ( 'Một' + d- 10 ) : ( '0' + d));
       d=v & 0xf ;
       văn bản[j * 2 + 1 ]=( char )(d >= 10 ? ( 'Một' + d- 10 ) : ( '0' + d));
     }
     trở lại mới Chuỗi(văn bản);
   }

Cuối cùng, bài viết này về cơ chế chữ ký ứng dụng APK của Android và phương pháp đọc chữ ký kết thúc tại đây. Nếu bạn muốn biết thêm về cơ chế chữ ký ứng dụng APK của Android và phương pháp đọc chữ ký, vui lòng tìm kiếm bài viết CFSDN. Tôi hy vọng bạn sẽ ủng hộ blog của tôi trong tương lai! .

28 4 0
qq735679552
Hồ sơ

Tôi là một lập trình viên xuất sắc, rất giỏi!

Nhận phiếu giảm giá taxi Didi miễn phí
Phiếu giảm giá taxi Didi
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress