Trang 1 trên tổng số 2 12 Cuối cùngCuối cùng
Từ 1 tới 10 trên tổng số 16 kết quả

Đề tài: Bài tập giải mã | Chống nghe trộm điện thoại trên C?

  1. #1
    Ngày gia nhập
    02 2009
    Bài viết
    56

    Mặc định Bài tập giải mã | Chống nghe trộm điện thoại trên C?

    Một công ty muốn truyền dữ liệu qua đường dây điện thoại, nhưng họ e ngại thông tin bị nghe trộm. Nên tất cả dữ liệu được truyền thành các số nguyên có bốn chữ số. Ta cần viết chương trình ẩn hoá dữ liệu nhằm bảo mật dữ liệu.
    a) Viết hàm nhận vào một số nguyên dương có bốn chữ số, ẩn hoá số này bằng cách thay mỗi chữ số bởi lấy tổng của số đó với 7 rồi chia dư cho 10, sau đó hoán vị số nhất với số thứ ba, hoán vị số thứ hai với số thứ tư. Hàm trả về số đã ẩn hoá đó.
    b) Viết hàm nhận vào một số nguyên dương có bốn chữ số, xem số này là số đã được mã hoá như câu a), hãy giải mã thành số ban đầu (như lúc chưa mã hoá). Hàm trả về số đã được giải mã đó.
    câu a thì em làm dc rồi còn câu b nghỉ hoài không ra ai biết chỉ với

  2. #2
    Ngày gia nhập
    11 2008
    Nơi ở
    Hà Nội
    Bài viết
    70

    Bạn post code câu a lên đây, chắc câu b cũng tương tự câu a thôi.
    Dân thường sống đẹp đè bẹp dân chơi.
    Hi [you]

  3. #3
    Ngày gia nhập
    02 2009
    Bài viết
    56

    #
    C Code:
    1. include <stdio.h>
    2. void nhap(int &n)
    3. {
    4.     int i=1;
    5.     while(i<2)
    6.     {
    7.     printf("nhap so");
    8.         scanf("%d",&n);
    9.     if((n<1000)||(n>9999))
    10.     {
    11.         printf("ban da nhap sai ,hay nhap lai\n");
    12.     continue;
    13.         }
    14.     i++;
    15.     }
    16. }
    17. int tong(int s)
    18. {
    19.     int z=0,s1;
    20.     for(int i=1;i<=s;i++)
    21.     z=z+i;
    22.     s1=(z+7)%10;
    23.     return s1;
    24.  
    25.  
    26. }
    27. int hoanvi(int hv)
    28. {
    29.     int hvx=0,z;
    30.        
    31.     for(int i=1;hv!=0;i++)
    32.     {
    33.         z=hv%10;
    34.                 hv=hv/10;
    35.         switch(i)
    36.         {
    37.             case 1:
    38.             hvx+=z*100;
    39.                        
    40.             break;
    41.             case 2:
    42.             hvx+=z*1000;
    43.            
    44.                         break;
    45.             case 3:
    46.             hvx+=z;
    47.            
    48.                         break;
    49.             default:
    50.             hvx+=z*10;
    51.            
    52.             break;
    53.         }
    54.                
    55.     }
    56. return hvx;
    57. }
    58.  
    59.  
    60.  
    61. int anhoa(int a)
    62. {
    63.     int i,s=0,k,z=1,z1=10;
    64.     while(a!=0)
    65.     {
    66.         i=a%10;
    67.         a/=10;
    68.         k=tong(i);
    69.                
    70.         s+=z*k;
    71.        
    72.         z=z1*z;
    73.     }
    74.     return hoanvi(s);
    75. }
    76. void main()
    77. {
    78.     int a;
    79.     nhap(a);
    80.     printf("%d ",anhoa(a));
    81. }
    đây là code của mình chỉ câu a thôi còn câu b ko biết làm mấy bạn chỉ với
    Đã được chỉnh sửa lần cuối bởi trungvn222 : 08-05-2009 lúc 12:35 PM.

  4. #4
    Ngày gia nhập
    11 2008
    Nơi ở
    Hà Nội
    Bài viết
    70

    Theo mình hiểu thì là:
    thay mỗi chữ số bởi lấy tổng của số đó với 7 rồi chia dư cho 10
    chứ không phải là tổng của các số <= số đó với 7:
    C Code:
    1. for(int i=1;i<=s;i++)
    2.     z=z+i;
    3.     s1=(z+7)%10;
    4.     return s1;
    Dân thường sống đẹp đè bẹp dân chơi.
    Hi [you]

  5. #5
    Ngày gia nhập
    02 2009
    Bài viết
    56

    ẩn hoá số này bằng cách thay mỗi chữ số bởi lấy tổng của số đó với 7 rồi chia dư cho 10, sau đó hoán vị số nhất với số thứ ba, hoán vị số thứ hai với số thứ tư. Hàm trả về số đã ẩn hoá đó.
    bạn thấy dòng chủ màu xanh ko (mỗi chử số) có nghĩa là lấy từng chữ số rồi lấy tổng số đó với 7 song chia dư cho 10(mình nghỉ là vậy)

  6. #6
    Ngày gia nhập
    11 2008
    Bài viết
    186

    Mặc định Bài tập giải mã | Chống nghe trộm điện thoại trên C?

    Bài đơn giản sử dụng tính revert của module.

    C Code:
    1. /*************************************
    2.  * AUTHOR   bvKim
    3.  * DATE     08-May-2009
    4.  * FILE     tmp.c
    5.  * VERSION
    6.  * DESCRIPTION
    7.  *      encryption:
    8.  *          from a positive integral,
    9.  *          each digit plus 7 and modulus 10, retrieve remainder
    10.  *          switch first->third, second->fourth, there have new ciphertext
    11.  *      decryption:
    12.  *          revert modulus of 10
    13.  *          plus 3 and modulus of 10, back to plaintext
    14.  *************************************/
    15.  
    16.  
    17. /*************************************
    18.  * LIBRARY HEADER                    *
    19.  *************************************/
    20.  
    21. #include <stdio.h>
    22. #include <stdlib.h>
    23. #include <ctype.h>
    24. #include <string.h>
    25.  
    26. // character code
    27. #define ZERO             0x30
    28.  
    29. // input buffer
    30. #define MAX_INPUT           5
    31.  
    32. // input error code
    33. #define VALID_NUMBER      100
    34. #define INVALID_SIZE     -101
    35. #define INVALID_DIGIT    -102
    36.  
    37. // encrypt error code
    38. #define VALID_DATA        200
    39. #define INVALID_DATA     -201
    40. #define ESWITCH_DATA     -202
    41.  
    42. // location error code
    43. #define VALID_SWITCH      300
    44. #define INVALID_FROM     -301
    45. #define INVALID_TO       -302
    46. #define EFROM_EXCEED_TO  -303
    47. #define EOVERLAPPED      -304
    48.  
    49. /*************************************
    50.  * FUNCTION DEF.                     *
    51.  *************************************/
    52.  
    53. /*
    54.  * @function    check_valid_input()
    55.  *      check for valid input from user
    56.  */
    57. int check_valid_input( const char* _s )
    58. {
    59.     int _size = strlen( _s );
    60.     int _i = 0;
    61.     if( _size != MAX_INPUT - 1 )
    62.         return INVALID_SIZE;
    63.     for( ; _i < _size; ++_i )
    64.     {
    65.         if( !isdigit( _s[ _i ]) )
    66.             return INVALID_DIGIT;
    67.     }
    68.    
    69.     return VALID_NUMBER;
    70. }
    71.  
    72. /*
    73.  * @function    switch_data()
    74.  *      switch chars among string
    75.  */
    76.  
    77. int switch_data( char* _s, const int _from, const int _to )
    78. {
    79.     int _size = strlen( _s );
    80.     if( _from < 0 || _from > _size )
    81.         return INVALID_FROM;
    82.     if( _to < 0 || _to > _size )
    83.         return INVALID_TO;
    84.     if( _from > _to )
    85.         return EFROM_EXCEED_TO;
    86.     else if ( _from == _to )
    87.         return EOVERLAPPED;
    88.    
    89.     int __c = * ( _s + _from );
    90.     * ( _s + _from ) = * ( _s + _to );
    91.     * ( _s + _to ) = __c;  
    92.    
    93.     return VALID_SWITCH;
    94. }
    95.  
    96. /*
    97.  * @function    encrypt_data()
    98.  *      perform encryption
    99.  */
    100.  
    101. int encrypt_data( const char* _plain_text, char* _cipher_text )
    102. {
    103.     int _i = 0, __digit;
    104.     char __c;
    105.     // check valid data
    106.     if( VALID_NUMBER != check_valid_input( _plain_text ) )
    107.         return INVALID_DATA;
    108.    
    109.     // valid data
    110.     for( ; _i < MAX_INPUT - 1; ++_i )
    111.     {
    112.         __digit = _plain_text[ _i ] - ZERO;
    113.         __digit = ( __digit + 7 ) % 10;
    114.         __c = __digit + ZERO;
    115.         * ( _cipher_text + _i ) = __c;
    116.     }
    117.     * ( _cipher_text + _i ) = 0;
    118.    
    119.     int _res_switch = switch_data( _cipher_text, 0, 2 );
    120.     if( VALID_SWITCH != _res_switch )
    121.         return ESWITCH_DATA;
    122.     _res_switch = switch_data( _cipher_text, 1, 3 );
    123.     if( VALID_SWITCH != _res_switch )
    124.         return ESWITCH_DATA;
    125.    
    126.     return VALID_DATA;
    127. }
    128.  
    129. /*
    130.  * @function    encrypt_data()
    131.  *      perform encryption
    132.  */
    133.  
    134. int decrypt_data( const char* _cipher_text, char* _plain_text )
    135. {
    136.     int _i = 0, __digit;
    137.     char __c;
    138.     // check valid data
    139.     if( VALID_NUMBER != check_valid_input( _cipher_text ) )
    140.         return INVALID_DATA;
    141.    
    142.     // valid data
    143.     strncpy( _plain_text, _cipher_text, MAX_INPUT );
    144.    
    145.     int _res_switch = switch_data( _plain_text, 0, 2 );
    146.     if( VALID_SWITCH != _res_switch )
    147.         return ESWITCH_DATA;
    148.     _res_switch = switch_data( _plain_text, 1, 3 );
    149.     if( VALID_SWITCH != _res_switch )
    150.         return ESWITCH_DATA;   
    151.    
    152.     for( ; _i < MAX_INPUT - 1; ++_i )
    153.     {
    154.         __digit = _plain_text[ _i ] - ZERO;
    155.         __digit = ( __digit + 3 ) % 10;
    156.         __c = __digit + ZERO;
    157.         * ( _plain_text + _i ) = __c;
    158.     }
    159.     * ( _plain_text + _i ) = 0;
    160.    
    161.     return VALID_DATA; 
    162. }
    163.  
    164. /*************************************
    165.  *  MAIN                             *
    166.  *************************************/
    167.  
    168. int main()
    169. {
    170.     // var
    171.     char raw_number [ MAX_INPUT ];
    172.     char plain_text [ MAX_INPUT ];
    173.     char cipher_text[ MAX_INPUT ]; 
    174.     int ercode;
    175.    
    176.     // get input
    177.     printf( "Gimme 4-digit number: " ); fgets( raw_number, MAX_INPUT, stdin );
    178.    
    179.     // encrypt 
    180.     ercode = encrypt_data( raw_number, cipher_text );
    181.    
    182.     if( VALID_DATA == ercode )
    183.         printf( "=> Ciphertext: %s \n", cipher_text );
    184.     else
    185.         printf( "=> Error code: %d \n", ercode );
    186.    
    187.     // decrypt
    188.     ercode = decrypt_data( cipher_text, plain_text );
    189.    
    190.     if( VALID_DATA == ercode )
    191.         printf( "=> Plaintext : %s \n", plain_text );
    192.     else
    193.         printf( "=> Error code: %d \n", ercode );  
    194.        
    195.     // return
    196.     return 0;
    197. }

    Demo:

    Code:
    > shell cmd: ./tmp 
    Gimme 4-digit number: 1234
    => Ciphertext: 0189 
    => Plaintext : 1234 
    
    > shell cmd: ./tmp 
    Gimme 4-digit number: 2009
    => Ciphertext: 7697 
    => Plaintext : 2009
    Ước mơ vươn tới Linux Developer.
    Đang trong quá trình tập luyện:
    1. C system programming
    2. GNU distribution
    3. Gtk+/Gnome Application Programming.

    Bác nào giỏi lĩnh vực này giúp Kim với nha. Kim cám ơn nhiều !!!

  7. #7
    Ngày gia nhập
    02 2009
    Nơi ở
    105 Lô P c/c ngô gia tự P.02 Q.10 TP.hcm
    Bài viết
    37

    code này bạn test coi thư he cai biến từ bài bạn đó bài bạn sai cái tính tổng có đáp án câu b luôn
    C Code:
    1. #include <stdio.h>
    2. void nhap(int &n)
    3. {
    4.     int i=1;
    5.     while(i<2)
    6.     {
    7.     printf("nhap so");
    8.         scanf("%d",&n);
    9.     if((n<1000)||(n>9999))
    10.     {
    11.         printf("ban da nhap sai ,hay nhap lai\n");
    12.     continue;
    13.         }
    14.     i++;
    15.     }
    16. }
    17. int hoanvi(int hv)
    18. {
    19.     int hvx=0,z;  
    20.     for(int i=1;hv!=0;i++)
    21.     {
    22.         z=hv%10;
    23.                 hv=hv/10;
    24.         switch(i)
    25.         {
    26.             case 1:
    27.             hvx+=z*100;break;
    28.             case 2:
    29.             hvx+=z*1000;break;
    30.             case 3:
    31.             hvx+=z;break;
    32.             default:
    33.             hvx+=z*10;break;
    34.         }          
    35.     }
    36. return hvx;
    37. }
    38. int anhoa(int a)
    39. {
    40.     int i,t=0;
    41.     while(a!=0)
    42.     {
    43.         i=(a%10+7)%10;
    44.         a/=10;    
    45.         t=(t+i)*10;
    46.     }
    47.     a=t/10;t=0;
    48.     while(a!=0)
    49.     {
    50.         i=a%10;
    51.         a/=10;
    52.         t=(t+i)*10;
    53.     }
    54.     t/=10;
    55.     return hoanvi(t);
    56. }
    57. int giaihoa(int a)
    58. {
    59.     int i,t=0;// neu 0la3>>7la 0;8la1;9la2 vay doi y thanh vay la ok vay doi lai la i=(a%10+3)%10;
    60.     while(a!=0)
    61.     {
    62.         i=((a%10)+3)%10;
    63.         a/=10;    
    64.         t=(t+i)*10;
    65.     }
    66.     if(t>9999)
    67.         a=t/10;
    68.     else
    69.         a=t+3;
    70.     t=0;
    71.     while(a!=0)
    72.     {
    73.         i=a%10;
    74.         a/=10;
    75.         t=(t+i)*10;
    76.     }
    77.     t/=10;
    78.     return hoanvi(t);
    79. }
    80. void main()
    81. {
    82.     int a;
    83.     nhap(a);
    84.     if(anhoa(a)>1000)
    85.         printf("%d ",anhoa(a));
    86.     else
    87.         printf("0%d",anhoa(a));
    88.     printf("\n moi nhap an hoa de giai:");
    89.     scanf("%d",&a);
    90.     printf("%d ",giaihoa(a));
    91. }
    Đã được chỉnh sửa lần cuối bởi Phamvanla19 : 09-05-2009 lúc 11:24 AM. Lý do: làm đẹp

  8. #8
    Ngày gia nhập
    02 2009
    Bài viết
    56

    test bi sai nhap 1234 ra 4723 nhap 4723 de giai ra so -6403

  9. #9
    Ngày gia nhập
    11 2008
    Bài viết
    186

    Trích dẫn Nguyên bản được gửi bởi trungvn222 Xem bài viết
    test bi sai nhap 1234 ra 4723 nhap 4723 de giai ra so -6403
    Code tui xịn 100% sáng sủa và gọn gàng + tối ưu. Sai là sai thế nào
    Ước mơ vươn tới Linux Developer.
    Đang trong quá trình tập luyện:
    1. C system programming
    2. GNU distribution
    3. Gtk+/Gnome Application Programming.

    Bác nào giỏi lĩnh vực này giúp Kim với nha. Kim cám ơn nhiều !!!

  10. #10
    Ngày gia nhập
    02 2009
    Bài viết
    56

    test bị sai rồi mà ông test thử đi

Các đề tài tương tự

  1. chuyên bán tai nghe điện thoại,Sennheiser CX300-II, cx400-II.., bán tai nghe Monster Beats tour
    Gửi bởi balinh trong diễn đàn Giới thiệu website, sản phẩm của bạn
    Trả lời: 1
    Bài viết cuối: 17-11-2012, 11:12 AM
  2. Tai nghe Monster Beats studio,Beats Tour by Dr.Dre,chuyên bán tai nghe điện thoại hay nhất_ hà nội
    Gửi bởi raovat trong diễn đàn Giới thiệu website, sản phẩm của bạn
    Trả lời: 0
    Bài viết cuối: 01-01-2012, 10:54 PM
  3. Tạo chương trình nghe nhạc đơn giản trên mobile như thế nào ?
    Gửi bởi longgiahuy trong diễn đàn Lập trình Windows Mobile bằng C#
    Trả lời: 0
    Bài viết cuối: 28-10-2011, 02:22 PM

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn