Mã hóa mật khẩu trong Selenium Webdriver

149

Bài viết được sự cho phép của tác giả Vân Anh

Khi sử dụng automation để thực hiện tự động một việc nào đó, mà ở đó có sự xuất hiện của một số những thông tin nhạy cảm mà ta không muốn nó bị lộ thiên cho bàn dân thiên hạ thấy, vậy thì chúng ta phải làm như thế nào? Thông tin nhạy cảm ở đây có thể là thông tin password chẳng hạn :)) Tuy nhiên, nếu như bạn chỉ là thực hiện công việc test thông thường và không quan tâm lắm, hoặc không có các dữ liệu nhạy cảm thì có thể bỏ qua bài này nhé :))) Nhưng mình nghĩ là đã đọc đến đây rồi thì đọc nốt đi, biết đâu sau này lại cần dùng thì sao? :v

  Các kiểu “đợi chờ” trong Selenium Webdriver: Implicit wait, Explicit wait và Fluent wait
  JavaScript Executor trong Selenium Webdriver

Bởi vì Selenium thông thường thì sẽ không có khả năng che dấu mật khẩu và thậm chí kể cả IDE của Elipse cũng vậy. Cho nên người ta mới nghĩ ra một cách để có thể giúp kiểm soát việc hiển thị của các dữ liệu nhạy cảm bên ngoài môi trường kiểm thử (hoặc môi trường thực tế nào đó), đó là tạo một lớp để có thể thực hiện mã hóa (hoặc giải mã) dữ liệu khi thực thi.

Có hai cách để bạn có thể thực hiện mã hóa, ở đây mình ví dụ là mã hóa mật khẩu nhé.

Cách 1

Cách thứ nhất sử dụng thư viện java.util.Base64, bạn thực hiện mã hóa bằng cách sử dụng hàm mã hóa mặc định của BASE64 với cú pháp như sau:

static String password= "yourPassword";
public static String getDecodedpassword() {
   return new String(Base64.getDecoder().decode(decodepassword.getBytes()));
}

Cách này khá là đơn giản, nhưng đối với những password dài quá 12 ký tự và có những ký tự đặc biệt khi mã hóa sẽ bị quá độ dài có thể xử lý hiển thị được của BASE64, không hợp lệ đối với lý tự đặc biệt và theo mình thì đây cũng chính là điểm yếu của cách này. Chắc là không khuyến khích sử dụng cách này rồi.

Cách 2

Cách thứ 2 là sử dụng thư viện sun.misc.BASE64Encoder với thư viện này thì ta có thể thoải mái với bất kỳ loại password nào (bất kỳ password này là do mình nghĩ ra và nhập vào =)) ) Tương tự cách 1 chỉ khác import thư viện và hàm sử dụng một chút thôi.

static String decodepassword = "yourPassword@874";
public static String getDecodedpassword() {
   return new String(new BASE64Encoder().encodeBuffer(decodepassword.getBytes()));
}

Với cách thứ 2, ta không phải nghĩ về vấn đề độ dài của password hay các ký tự đặc biệt xuất hiện trong password nhập vào. Bên cạnh đó, ta cũng có thể tự tùy biến một hàm mã hóa, và hàm giải mã của nó kết hợp với 1 key (chìa khóa) để giải mã. Key này có thể là một chuỗi ký tự bất kỳ, bằng một vài kỹ năng cơ bản ta kết hợp chuỗi key này vào trong chuỗi password ban đầu rồi sau đó mới thực hiện mã hóa. Tất nhiên để giải mã ngược lại thì ta cũng cần phải có key chính xác đã được sử dụng ở phần mã hóa. Tùy nhu cầu mà bạn có thể lựa chọn cách phù hợp nhé :)) Chỉ có điều cách nào ngon thì sẽ phải ngồi code í, :))) – Không code thì chịu khó Google chắc là sẽ ra, à chắc chắn sẽ ra :v

Đấy, tóm lại là muốn bảo mật hơn thì tất nhiên phải dành thời gian :))) Các bạn có thể tham khảo link này để xem thêm việc biến tấu mật khẩu kết hợp với key để mã hóa, rồi sau đó thực hiện giải mã với key đã có nhé.

Mình nghĩ là đưa ra gợi ý đến đây cũng khá là chi tiết và đầy đủ thông tin rồi nhỉ. Các bạn đã sử dụng những cách nào rồi, hay có còn những cách nào khác không? Nếu có vui lòng chia sẻ cho mình và các bạn đọc khác cùng biết nữa nha. Hoặc có ý kiến đóng góp, trao đổi gì thì cũng đừng ngần ngại để lại bình luận phía dưới nhé!

Tham khảo:

Password Encryptor for Selenium Webdriver

https://developers.perfectomobile.com/pages/viewpage.action?pageId=21430626

Bài viết gốc được đăng tải tại vananhtooo.wordpress.com

Có thể bạn quan tâm:

Xem thêm Việc làm Developer hấp dẫn trên TopDev