2010-07-09 45 views
7

Tôi đang cố gắng xây dựng một kết hợp câu/chữ sẽ trả về mọi ký tự base64, nhưng không tìm được từ nào cho mục đích thử nghiệm đơn vị.Câu sử dụng mọi ký tự base64

Các thử nghiệm đơn vị tôi có cho đến nay không đạt được các dòng xử lý dấu + và /. Trong khi tôi có thể treo chúng ở bộ mã hóa/bộ giải mã trực tiếp thì sẽ tốt hơn nếu có một nguồn có thể đọc được của con người (tương đương base64 của 'con chó nâu nhanh').

+0

Hm ... Vấn đề tôi thấy ở đây là câu sẽ có để được lâu dài và do đó nó có thể được mistyped. Và nếu bạn không nhập, nhưng sao chép-dán thay vào đó bạn có thể sử dụng bất kỳ chuỗi được tạo nào phù hợp. – sharptooth

+0

Nhưng nếu bạn cố gắng làm việc ngược và kết hợp các ký tự + và /, bạn có thể nhận các ký tự với âm sắc, vv hoặc không thể in được mà không hữu ích khi truyền đi một cách không rõ ràng. –

Trả lời

9

Đây là một Base64 mã hóa chuỗi thử nghiệm bao gồm tất cả 64 thể ký tự Base64:

char base64_encoded_test[] = 
"U28/PHA+VGhpcyA0LCA1LCA2LCA3LCA4LCA5LCB6LCB7LCB8LCB9IHRlc3RzIEJhc2U2NCBlbmNv" 
"ZGVyLiBTaG93IG1lOiBALCBBLCBCLCBDLCBELCBFLCBGLCBHLCBILCBJLCBKLCBLLCBMLCBNLCBO" 
"LCBPLCBQLCBRLCBSLCBTLCBULCBVLCBWLCBXLCBYLCBZLCBaLCBbLCBcLCBdLCBeLCBfLCBgLCBh" 
"LCBiLCBjLCBkLCBlLCBmLCBnLCBoLCBpLCBqLCBrLCBsLCBtLCBuLCBvLCBwLCBxLCByLCBzLg=="; 

char base64url_encoded_test[] = 
"U28_PHA-VGhpcyA0LCA1LCA2LCA3LCA4LCA5LCB6LCB7LCB8LCB9IHRlc3RzIEJhc2U2NCBlbmNv" 
"ZGVyLiBTaG93IG1lOiBALCBBLCBCLCBDLCBELCBFLCBGLCBHLCBILCBJLCBKLCBLLCBMLCBNLCBO" 
"LCBPLCBQLCBRLCBSLCBTLCBULCBVLCBWLCBXLCBYLCBZLCBaLCBbLCBcLCBdLCBeLCBfLCBgLCBh" 
"LCBiLCBjLCBkLCBlLCBmLCBnLCBoLCBpLCBqLCBrLCBsLCBtLCBuLCBvLCBwLCBxLCByLCBzLg=="; 

Nó giải mã thành một chuỗi gồm toàn văn bản tương đối của con người có thể đọc được:

char test_string[] = "So?<p>" 
    "This 4, 5, 6, 7, 8, 9, z, {, |, } tests Base64 encoder. " 
    "Show me: @, A, B, C, D, E, F, G, H, I, J, K, L, M, " 
    "N, O, P, Q, R, S, T, U, V, W, X, Y, Z, [, \\, ], ^, _, `, " 
    "a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s."; 

này giải mã chuỗi chỉ chứa các chữ cái trong phạm vi giới hạn ký tự ASCII 7 bít của dấu gạch ngang() có thể (không gian đến '~').

Vì tôi đã làm điều đó, tôi cho rằng có thể :-).

+0

Tôi sẽ phải kiểm tra điều này khi tôi về nhà vào cuối tuần. –

+0

Ngạc nhiên \ không cần thoát trong chuỗi thử nghiệm của bạn. –

+0

oops. Có, tôi cần phải tăng gấp đôi dấu gạch chéo ngược để thoát khỏi nó nếu tôi muốn đặt chuỗi kiểm tra này trong mã nguồn của tôi (nhưng không phải nếu tôi đọc nó từ một tệp). Đã sửa. –

1

Có thể bạn không thể làm điều đó.

/ trong mã hóa base64 111111 (6 '1' bit).

Vì tất cả ASCII (là các ký tự có thể in và có thể in) nằm trong khoảng 0-127 (tức là 0000000001111111), ký tự ASCII duy nhất có thể được mã hóa bằng '/' là ký tự ASCII mã 127, là ký tự không thể in được DEL.

Nếu bạn cho phép giá trị lớn hơn 127, bạn có thể có chuỗi có thể in nhưng không thể nhập.

1

Khi cố gắng mã hóa/giải mã, đây là nơi mà tôi vi phạm quy tắc kiểm tra đơn vị một phương pháp cùng một lúc. Bạn có thể có các phương pháp để mã hóa hoặc giải mã một cách riêng biệt, nhưng cách duy nhất để biết bạn đang làm đúng cách là sử dụng cả mã hóa và giải mã trong một khẳng định đơn lẻ. Tôi sẽ sử dụng mã psuedo sau đây.

Generate a random string using Path.GetRandomFilename() this string is cryptographically strong 
Pass the string to the encode method 
Pass the output of the encode to the decode method 
Assert.AreEqual(input from GetRandomFilename, output from Decode) 

Bạn có thể lặp lại thao tác này bao nhiêu lần tùy ý muốn kiểm tra. Bạn cũng có thể bao gồm một số trường hợp cụ thể; tuy nhiên, vì mã hóa (đôi khi) khác nhau dựa trên vị trí của các chữ cái, bạn nên sử dụng chuỗi ngẫu nhiên và chỉ cần mã hóa/giải mã khoảng 50 lần.

Nếu bạn thấy rằng mã hóa/giải mã không thành công trong các trường hợp được chấp nhận, hãy tạo các kiểm tra đơn vị cho các bộ lọc đó và lọc ra các chuỗi chứa các ký tự/ký tự kết hợp đó. Đồng thời, ghi lại những thất bại đó trong các nhận xét XMLDocs, nhận xét mã và bất kỳ tài liệu nào mà ứng dụng của bạn có.

+0

Tôi thực sự đang sử dụng một số chuỗi dài từ RFC3548. Vì đây chỉ là văn bản tiếng Anh, phạm vi ký tự bị giới hạn. –

0

Những gì tôi đã đưa ra, có thể chứng minh không gây bất tiện. Cần phải nhập chính xác như sau: Tôi bao gồm liên kết đến ảnh chụp màn hình hiển thị tất cả các ký tự thường ẩn bên dưới, cũng như chuỗi dữ liệu Base64 mà nó chuyển đổi và bảng thống kê có liên quan thích hợp với mỗi ký tự trong số 64 ký tự trong đó .


  <HTML><HEAD></HEAD><BODY><PRE> 
      Did 

      THE  

       THE QUICK BROWN FOX 

       jump 

       over  

       the  

        lazy 

        dogs 

        or 

        was  

         he  

         pushed 

         ? 

      </PRE><B>hmm.</B></BODY><HTML> 






      ÿß®Þ~c*¯/ 

này mã hóa cho chuỗi Base64:

  PEhUTUw+PEhFQUQ+PC9IRUFEPjxCT0RZPjxQUkU+DQpEaWQJDQoNCiBUSEUJDQoNCiAgVEhFIFFVSUNLIEJST1dOIEZPWAkNCg0KICAganVtcAkNCg0KICAgIG92ZXIJDQoNCiAgICAgdGhlCQ0KDQogICAgICBsYXp5CQ0KDQogICAgICAgZG9ncwkNCg0KICAgICAgICBvcgkNCg0KICAgICAgICAgd2FzCQ0KDQogICAgICAgICAgaGUJDQoNCiAgICAgICAgICAgcHVzaGVkCQ0KDQogICAgICAgICAgICA/CQ0KDQo8L1BSRT48Qj5obW0uPC9CPjwvQk9EWT48SFRNTD4NCg0KDQoNCg0KDQoNCg//367efmMqry/== 

chứa

  5--/'s 
      4--+'s 
      3--='s 
      14--0's 
      3--1's 
      3--2's 
      2--3's 
      4--4's 
      3--5's 
      2--6's 
      2--7's 
      4--8's 
      6--9's 
      5--a's 
      27--A's 
      2--b's 
      5--B's 
      5--c's 
      4--C's 
      4--d's 
      14--D's 
      2--e's 
      10--E's 
      2--f's 
      8--F's 
      36--g's 
      6--G's 
      5--h's 
      2--H's 
      5--i's 
      30--I's 
      5--j's 
      6--J's 
      8--k's 
      12--K's 
      2--l's 
      3--L's 
      2--m's 
      4--M's 
      3--n's 
      14--N's 
      13--o's 
      2--O's 
      3--p's 
      9--P's 
      2--q's 
      24--Q's 
      2--r's 
      5--R's 
      2--s's 
      6--S's 
      2--t's 
      7--T's 
      2--u's 
      1--U's 
      3--v's 
      6--V's 
      4--w's 
      5--W's 
      3--x's 
      6--X's 
      2--y's 
      4--Y's 
      3--z's 
      5--Z's 
+0

oops quên liên kết đến ảnh chụp màn hình hiển thị invisibles: http://anony.ws/image/kbWa –

Các vấn đề liên quan