Tạo hàm mã hóa SHA-256 trên Oracle 11g R2 (hashing-with-sha-256-in-oracle-11g-r2)

Hàm băm SHA1 đã được công bố đã bị phá mà không phải bằng thuật toán vét cạn.
Tất cả các mã hóa toàn vẹn dữ liệu của mã SHA-1 cần phải chuyển đổi sang bộ mã hóa cao cấp hơn ví dụ hàm SHA-256.

Trong hệ thống của công ty mình hiện đang sử dụng SHA-1 để mã hóa thông tin trước khi gửi sang đối tác, vì vậy cần phải nâng cấp sang hàm băm SHA-256.
Hàm băm SHA-256 chỉ có sẵn từ bản Oracle 12c, bản Oracle 11g sẽ không có. Có 2 cách để có được hàm băm SHA-256:
Cách 1: Sử dụng thư viện của Java có sẵn trong JDK để tạo nên hàm SHA-256
Tham khảo tại địa chỉ: https://dzone.com/articles/hashing-with-sha-256-in-oracle-11g-r2
Nhưng ở địa chỉ này chạy sẽ không được procedure do phải tắt tính năng define của Orcle đi.
Các bước lần lượt như sau:

B1: Tắt chế độ define

set define off


B2: Tạo tài nguyên class Java trong Oracle:

CREATE OR REPLACE AND RESOLVE JAVA SOURCE NAMED test."calcsha"
    AS import java.security.MessageDigest; 
 public class calcsha2 
     {
         static public String fncsha(String inputVal) throws Exception
         {           
             MessageDigest myDigest = MessageDigest.getInstance("SHA-256");        
             myDigest.update(inputVal.getBytes());
             byte[] dataBytes = myDigest.digest();
             StringBuffer sb = new StringBuffer();
             for (int i = 0; i < dataBytes.length; i++) {
              sb.append(Integer.toString((dataBytes[i])).substring(1));
             }        
             StringBuffer hexString = new StringBuffer();
             for (int i=0;i<dataBytes.length;i++) {
                 String hex=Integer.toHexString(0xff & dataBytes[i]);
                     if(hex.length()==1) hexString.append('0');
                     hexString.append(hex);
             }
             String retParam = hexString.toString();
             return retParam;           
         }    
     }

B3: Viết thủ tục để gọi đến tài nguyên trên:

CREATE OR REPLACE FUNCTION test.hash_sha256 (txt varchar2)
 RETURN VARCHAR2
 AS
 LANGUAGE JAVA
 NAME 'calcsha2.fncsha(java.lang.String) return String';

B4: Bật trả chế độ define

 set define on

B5: Test kết quả:

 select hash_sha256('123456789') from dual;



So sánh với kết quả online: https://passwordsgenerator.net/sha256-hash-generator/

Cách 2: Cách này viết mới luôn hàm SHA-256 bằng PL-SQL
Tham khảo tại: https://github.com/CruiserX/sha256_plsql

Ta cũng có thể test kết quả so với cách 1.

Trưởng nhóm mình yêu cầu làm cách 2. Theo bản thân mình thì nên làm cách 1 vì toàn bộ là sử dụng thư viện chung JAVA của toàn thế giới, phần code tường minh. Còn cách 2 thì đi copy trên mạng về chạy cảm giác không được an toàn lắm.

Download tạp chí Trí tuệ nhân tạo số 7

Trong số này, Mục Góc nhìn chuyên gia sẽ giới thiệu bài viết của nhà báo  Ariel Conn thảo luận về Trí tuệ Nhân tạo dưới góc nhìn an toàn và đạo đức.

Phần Machine Learning Tutorial, tác giả Hà Đỗ sẽ bàn về Multicollinearity, một vấn đề rất nghiêm trọng của Regression.

Tác giả Nguyễn Linh sẽ tiếp tục giới thiệu những bước cơ bản để xử lý dữ liệu ngôn ngữ thô. Sau đó, chúng ta sẽ đi vào tìm hiểu phương pháp tiếp cận thống kê với mô hình Ngram.

Các bạn có thể download Tạp chí Trí tuệ Nhân tạo số 7 tại đây.

Nguồn: tapchiai.com

Dowload tạp chí Trí tuệ nhân tạo số 5

Năm 2017 khép lại với nhiều thành tự nổi bật trong lĩnh vực Trí tuệ nhân tạo nói riêng và trong lĩnh vực công nghệ nói chung. Năm vừa qua, sự ra đời của AlphaGo, AlphaGo Zero đã chứng minh được sức mạnh tiềm tàng của công nghệ Trí tuệ Nhân tạo, mở ra nhiều cơ hội mới trong tương lai trong việc sử dụng công nghệ này để giải quyết những vấn đề của con người. Nhưng nó cũng đặt ra nhiều thách thức với chúng ta, đặc biệt là trong vấn đề việc làm, trong vấn đề sự an toàn của công nghệ tiềm năng này.

Số tháng 1 cũng sẽ đánh dấu một bước chuyển mình mới của Tạp chí Trí tuệ Nhân tạo, chuyển từ việc giới thiệu những kiến thức cơ bản trong nghiên cứu và phát triển Machine Learning và Trí tuệ Nhân tạo, sang những vấn đề phức tạp nhưng cũng nhiều điều thú vị hơn. Nhưng trước tiên, hãy xem trong số này có những gì:

  • Phần Góc nhìn chuyên gia, sẽ giới thiệu về hiện trạng của việc ứng dụng công nghệ Trí tuệ Nhân tạo trong lĩnh vực Y tế và sức khỏe, một lĩnh vực nhận được nhiều sự quan tâm từ giới nghiên cứu Trí tuệ Nhân tạo.
  • Phần Machine Learning Tutorial sẽ tiếp tục nói về linear và logistic regression, mà cụ thể là một số phân tích ex-post đơn giản cho phép hiểu rõ hơn về cấu trúc dữ liệu và ảnh hưởng của chúng lên mô hình
  • Phần R trong Machine Learning sẽ tiếp tục giới thiệu một số thư viện R quan trọng, cần phải biết như ggplot2, shiny và R Markdown

Phần 2 pages paper số này xin khất các bạn độc giả vì Ban Biên tập khá bận bịu trong thời gian này.

Như đã nói ở trên, số thứ 5 sẽ kết thúc giai đoạn kiến thức cơ bản của Tạp chí Trí tuệ Nhân tạo, sau số này tạp chí sẽ đi chuyên sâu hơn vào các lĩnh vực của Trí tuệ Nhân tạo, mà trước mắt là Machine Learning và Natural Language Processing.

Phần Machine Learning sau khi đã giới thiệu đủ các lý thuyết cơ bản sẽ hướng tới giải quyết cách bài toán cụ thể hơn trong thực tế.

Phần Natural Languague Processing sẽ bàn về cách ứng dụng các thuật toán NLP vốn được phát triển trên nền tảng ngôn ngữ Anh, vào trong tiếng Việt.

Tạp chí cũng đang cố gắng mở rộng sang các lĩnh vực khác trong Trí tuệ Nhân tạo như Computer Vision, Speech Processing ..v.v. Vì vậy, Ban biên tập mong muốn kêu gọi sự tham gia của cách thành viên trong cộng đồng nghiên cứu Trí tuệ Nhân tạo cùng tham gia với bọn mình trong công cuộc phát triển Tạp chí Trí tuệ Nhân tạo.

Các bạn có thể download Tạp chí Trí tuệ Nhân tạo số 5 tại đây.

Nguồn: tapchiai.com

Top 10 ứng dụng thực tế của Machine Learning

Machine Learning là một sáng tạo hiện đại giúp con người không chỉ ở quy mô công nghiệp và các quy trình chuyên nghiệp mà còn thúc đẩy cuộc sống hàng ngày. Nhưng Machine Learning là gì? Nó là một phần của Trí tuệ nhân tạo, Machine Learning tập trung vào các kỹ thuật thống kê để xây dựng các hệ thông máy tính trông minh để học từ các cơ sở dữ liệu sẵn có cho nó. Hiện nay, Machine learning đã được sử dụng trong nhiều lĩnh vực và ngành công nghiệp. Ví dụ: chuẩn đoán trong y học, xử lý ảnh, dự đoán tài chính, phân loại, học kết hợp, hồi quy…
Các hệ thống thông minh được dây dựng dựa trên các thuật toán Machine Learning có khả năng học hỏi từ kinh nghiệm trước đó hoặc dữ liệu lịch sử. Các ứng dụng của Machine Learning cung cấp kết quả trên cơ sở dữ liệu hoặc kinh nghiệp từ quá khứ. Trong bài này, chúng ta sẽ thảo luận về 10 ví dụ thực tế về cách sử dụng Machine Learning đang giúp tạo ra các công nghệ mới mạnh mẽ hơn.

Nhận dạng hình ảnh (Image Recognition)

Nhận dạng hình ảnh là một trong những ứng dụng phổ biến nhất của Machine Learning. Có nhiều tình huống để phân loại đối tượng trong một hình ảnh kỹ thuật số. Ví dụ, trường hợp ảnh đen trắng thì sẽ sử dụng phép đo mức xám của từng pixel còn trong ảnh màu thì lại sử dụng phép đo cường độ của 3 màu khác nhau tạo nên 1 pixel (R-G-B).
Machine Learning cũng được ứng dụng để phát hiện khuôn mặt trong ảnh. Có một danh mục riêng cho mỗi người trong cơ sở dữ liệu hình ảnh của nhiều người. Machine Learning cũng được sử dụng trong nhận dạng chữ viết để phân biệt chữ viết tay hay chữ in. Chúng ta cần phân đoạn một đoạn văn bản thành các hình ảnh nhỏ hơn, mỗi hình ảnh chứa một ký tự.

Nhận dạng giọng nói (Speech Recognition)

Nhận dạng giọng nói là việc chuyển đổi giọng nói thành văn bản. Nó được biết đến với máy nhận dạng giọng nói hoặc nhận dạng giọng nói tự động. Ở đây, một phần mềm có thể nhận ra các từ được nói trong các clip hoặc audio và sau đó chuyển đổi thành file văn bản. Phép đo trong ứng dụng này có thể là một tập hợp các số đại diện cho tín hiệu giọng nói. Ta cũng có thể phân đoạn tín hiệu giọng nói theo cường độ trong các khung thời gian khác nhau.
Nhận dạng giọng nói được sử dụng trong các ứng dụng có giao diện tương tác qua giọng nói, tìm kiếm bằng giọng nói… Giao diện người dùng thông qua giọng nói bao gồm quay số bằng giọng nói, điều hướng cuộc gọi và điều khiển thiết bị. Nó cũng có thể được sử dụng như một công cụ nhập liệu đơn giản và chuẩn bị các tài liệu có cấu trúc.

Machine Learning là gì?
Machine Learning là gì?

Chuẩn đoán trong ý học (Medical diagnosis)

Machine Learning có thể sử dụng trong các kỹ thuật và công cụ chuẩn đoán bệnh. Nó được sử dụng để phân tích các biểu hiện lâm sàng và kết hợp chúng để tiên đoán về sự tiến triển của bệnh tật để thông tin tới bác sỹ để lập kế hoạch điều trị và theo dõi bệnh nhân. Đây là những ứng dụng thành công của các phương pháp Machine Learning. Nó có thể giúp tích hợp các hệ thống trong lĩnh vực chăm sóc sức khỏe.

Phân tích chứng khoán (Statistical Arbitrage)

Trong lĩnh vực tài chính, chứng khoán nhắm vào các giao dịch tự động ngắn hạn với số lượng giao dịch lớn. Trong các chiến lược này, người dùng sẽ tập trung vào việc thực hiện các thuật toán giao dịch cho một mã chứng khoán trên cơ sở số lượng cũng như tương quan lịch sử và các biến số kinh tế chung. Phương pháp Machine Learning được áp dụng để có thể có được các chiến lược chênh lệnh giá. Chúng ta có thể áp dụng hồi quy tuyến tính (linear regression) và Vecto hỗ trợ (Support Vector Machine – SVM) cho bài toán này.

Learning associations

Learning associations là quá trình phát triển những hiểu biết sâu sắc về các hiệp hội giữa các sản phẩm. Ví dụ điển hình là làm thể nào các sản phẩm không liên quan có thể liên kế được với nhau. Một trong những ứng dụng của Machine Learning nghiên cứu mối liên hệ giữa các sản mà người dùng mua. Nếu một người mua sản phẩm thì hệ thống sẽ gợi ý các sản phẩm tương tự vì chúng có mối liên quan với nhau. Khi bất kỳ một sản phẩm mới nào được tung ra thị trường thì chúng sẽ được liên kết với các sản phẩm cũ để tăng doanh số.

Phân loại (Classification)

Classification là quá trình đặt từng cá nhân vào một trong nhiều lớp. Classification giúp phân tích các phép đo của một đối tượng để xác định xem nó sẽ thuộc vào danh mục nào. Để thiết lập mối quan hệ hiệu quả, các nhà phân tích sử dụng dữ liệu. Ví dụ, trước khi ngân hàng quyết định cho khách hàng vay, ngân hàng sẽ đánh giá xem khách hàng có khả năng trả khoản vay đó hay không. Bằng cách xem xét các yếu tố như thu nhập, tiết kiệm, lịch sử tài chính… Thông tin này được lấy từ dữ liệu cũ trong khoản vay.

Dự đoán (Prediction)

Machine Learning cũng được sử dụng trong các hệ thống dự đoán. Vẫn xem xét ví dụ về việc cho vay của ngân hàng, để tính xác suất xảy ra lỗi, hệ thống cần phân loại dữ liệu có sẵn theo nhóm. Nó được xác định bởi một bộ quy tắc được quy định bởi các nhà phân tích. Sau khi được phân loại xong, ta có thể tính xác xuất về lỗi có thể xảy ra. Những tính toán này có thể áp dụng trên nhiều lĩnh vực và mục đích khác nhau. Tạo dự đoánh là một ứng dụng phổ biến của Machine Learning.

Khai thác (Extraction)

Khai thác thông tin là một ứng dụng tốt nhất của Machine Learning. Nó là quá trình trích xuất thông tin có cấu trúc từ dữ liệu phi cấu trúc. Ví dụ các trang web, bài viết, blog, báo cáo kinh doanh và email. Cơ sở dữ liệu quan hệ duy trì đầu ra sản phẩm bởi việc trích xuất thông tin. Quá trình trích xuất lấy một tập hợp các tài liệu làm đầu vào và đầu ra dữ liệu có cấu trúc.

Hồi quy (Regression)

Chúng ta có thể thực hiện Machine Learning bằng thuật toán hồi quy. Trong hồi quy, chúng ta sử dụng các nguyên tắc của Machine Learning để tối ưu hóa các tham số. Nó cũng được sử dụng để giảm sai số gần đúng và tính toán kết quả gần nhất có thể. Cjimgs ta cimxh cps thể sử dụng Machine Learning để tới ưu hóa các chức năng. Chúng ta có thể chọn thay đổi các đầu vào để có được các kết quả gần nhất có thể.

Dịch vụ tài chính (Financial Services)

Machine Learning có rất nhiều tiềm năng trong lĩnh vực tài chính ngân hàng. Nó là động lực đằng sau sự phổ biến các dịch vụ tài chính. Machine Learning có thể giúp các ngân hàng, tổ chức tài chính đóng các tài khoản trước khi nó xảy ra. Nó cũng có thể theo dõi các mô hình chi tiêu của khách hàng. Machine Learning cũng có thể phân tích thị trường. Máy thông minh có thể được đào tạo để theo dõi các môi hình chi tiêu. Thuật toán có thể xác định các xu hướng dễ dàng và phản ứng ngay trong thời gian thực.

Kết luận

Tóm lại, chúng ta có thể nói rằng Machine Learning là một bước đột phá đáng kinh ngạc trong lĩnh vực trí tuệ nhân tạo. Trong khi đó, hàng ngày Machine Learning thay đổi để cải thiện cuộc sống của chúng ta.

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

Cài đặt Flask và Flask-API trên Window offline

Để cài đặt Flask và Flask-API offline trên Window ta cần dowload đầy đủ các thư viện và cài đặt lần lượt như sau:
(Cách cài đặt Package Office như bài hướng dẫn: Cách cài đặt các package của python trên Window offline)

1: Werkzeug
2: MarkupSafe
3: pytz
4: Babel
5: Jinja2
6: itsdangerous
7: Click
8: Flask
9: Flask-API

Để tải các thành phần trên ta vào địa chỉ: https://pypi.org/ để tìm và tải tại mục: Download files.

Cài đặt: pip27.exe install ThePackageFile-0.0.0.tgz

Cài đặt các package của python trên Window offline

Server trên công ty mình không được kết nối Internet nên mọi thứ đều phải cài đặt offline. Cài đặt Python thì đơn giản, google thì có đầy.
Nhưng khi cài đặt một số package mở rộng thì trên mạng thường hưỡng dẫn cài đặt trực tiếp command thông qua lệnh PIP: pip install “gói cần cài đặt”
Ví dụ trực quan như cài đặt qua PIP trên: https://pypi.org/project/Jinja2/#description
Thì gõ lệnh: pip install Jinja2
Hệ thống sẽ tự động tải và cài đặt toàn bộ các thư viện cần thiết trước khi cài Jinja2 và cài Jinja2.

Bước 1: Nếu không có kết nối Internet trên server thì ta buộc phải cài đặt thủ công nhưng cũng thông qua trình PIP. Để có PIP thì ta tải phần mềm PIP theo đường dẫn sau và copy lên server (có cả phiên bản pip cho Python3 tại: https://github.com/phamkhactuy/python_I_learn):
https://github.com/phamkhactuy/python_I_learn/blob/master/pip2.7.exe

Bước 2: Để cài đặt một gói nào đó, ta đi tải gói đó về. Ví dụ ta muốn cài thư viện Flask thì ta vào địa chỉ https://pypi.org/project/Flask/ hoặc google để tìm. Ta vào phần Download để tải Source về(định dạng file được nén dạng .tar.gz). Để đơn giản ta đặt file này cùng thư mục với file pip2.7,exe đã tải về (Ví dụ tải được file: Flask-1.0.2.tar).

Bước 3: Tại thư mục này ta giữ phím Shift nhấn chuột phải và chọn: Open command window here hoặc dùng lệnh Cmd di chuyển đến thư mục chứa file.

Bước 4: gõ lệnh: pip27.exe install Flask-1.0.2.tar
Chờ một lát là hệ thống tự động cài đặt xong.

APEX 5.x Thiết lập mặc định báo cáo trong Interactive Report

Trong quá trình duy trì và phát triển thêm các tính năng báo cáo của công ty sử dụng công cụ Apex, mình cần phải chỉnh sửa một báo cáo sử dụng loại có tên là Interactive Reoport.
Người dùng muốn bổ sung thêm cột dữ liệu mới ẩn bớt cột đi theo nghiệp vụ. Trong phần Page Designer mình đã thêm cột thành công nhưng gặp 2 vấn đề:

  • Không thể nào đặt các cột mới theo đúng vị trí mà mình muốn, mặc dù trong phần Columns đã kéo thả để sắp xếp
  • Không biết cách làm sao để query báo cáo vẫn có nhưng mặc định báo cáo hiển thị không có, khi nào người dùng cần thì dùng tính năng Actions -> Select column để có thể hiển thị.

Để hiển thị mặc định đối với tất cả các người dùng theo một form nhất định như thứ tự các cột cần hiển thị, danh sách các cột ẩn, danh sách các cột hiển thị thì ta dùng cách sau:

B1: Đăng nhập bằng tài khoản admin
B2: Vào giao diện ứng dụng của người dùng đầu cuối. Trong thanh menu tìm kiếm tùy chỉnh của báo cáo. Click Actions và thực hiện các thay đổi theo báo cáo mình cần hiển thị:

  • Select columns: Sắp xếp, lựa chọn các cột cần hiển thị.
  • Filter: Đặt các điều kiện để lọc dữ liệu
  • Rows per page: Cấu hình số dòng trên 1 trang…

B3: Lưu lại cấu hình mặc định này bằng cách vào Actions -> Save Report.
Mục Save chọn: As Default Report Setting sau đó chọn Apply.

Done. Tất cả các User khi truy cập báo cáo này sẽ được mặc định hiển thị dữ liệu theo cách mà ta đã cài đặt.

TIL: Quảng cáo qua Facebook đối với khách hàng tiềm năng

Xem tivi thấy có quảng cáo dịch vụ của một công ty đang có khuyến mãi, mình có gọi điện lên số của tổng đài để hỏi về chương trình khuyến mại này. Cuối cùng cũng không chốt sử dụng vì một số lý do nhưng một điều lạ là sau đó vài hôm trên new feed facebook cá nhân của mình tràn ngập các quảng cáo của công ty đó.

Nghĩ mãi không rõ nguyên nhân vì trước đó mình cũng không quan tâm dịch vụ này nên cũng không tìm kiếm hoặc click quảng cáo gì liên quan.

Một thời gian sau nhân viên công ty đó gọi điện tư vấn chương trình KM mới với mình. Mãi về sau mình mới phát hiện ra cách mà đội quảng cáo đã làm, khá thú vị đó là:
Khi mình gọi điện lên tổng đài của công ty đó, vì mình chưa là khách hàng của công ty nên sẽ được xếp vào dạng khách hàng tiềm năng. Từ danh sách này, công ty đó đã thuê quảng cáo Facebook nhắm đến đối tượng là danh sách người dùng Facebook có số điện thoại đăng ký là mình. Thảo nào trước đây Fb gợi ý và gần như bắt buộc người dùng cập nhật số điện thoại dưới chiêu trò đảm bảo bảo mật.

Ở đây thông tin cá nhân của mình đã bị Facebook sử dụng cho mục đích kiếm tiền của họ thông qua các công ty cần quảng cáo dịch vụ. Đây là một mẹo khá hay vì ít nhất mình có liên hệ chứng tỏ mình đã có 1 chút gì đó quan tâm đến dịch vụ nên việc quảng cáo đến đối tượng này khá hiệu quả.

Câu chuyện này cũng tương tự cách mà 1 đồng nghiệp cũ của mình đề xuất tới công ty đẩy mạnh quảng cáo đối với người dùng qua Facebook với đối tượng như sau:
Sử dụng 1 con bot crawl toàn bộ người dùng ở các Page của đối thủ hoặc người dùng liên quan đến mảnh dịch vụ của công ty để tiến hành quảng cáo trên đối tượng đó.

Cách gửi và nhận file qua sftp bằng thư viện pyftp của Python

Trong nhiều trường hợp ta cần gửi hoặc nhận file qua sftp cho bảo mật. Ngôn ngữ Python có cho phép ta làm việc này với thư viện pysftp.

Đầu tiên cần cài đặt thư viện pysftp bằng pip:

pip install pysftp

Mình đã thử bằng nhiều cách trên mạng nhưng mãi mới có được cách sau, ví dụ và giải thích code luôn:

import pysftp

cnopts = pysftp.CnOpts()
cnopts.hostkeys = None
try:
	# Tạo kết nối qua sFTP
	with pysftp.Connection('192.168.xxx.xxx',username='admin',password='admin',cnopts = cnopts) as sftp:
		#Lấy 1 file từ server
		#file=sftp.get('đường dẫn full file trên server','thư mục ở local')
		#Mặc định không để 'thư mục ở local' thì sẽ để file mặc định tại thư mục code python
		file=sftp.get('/u02/extract/file_name.csv')
		#Chuyển 1 file từ local lên server
		#file=sftp.put('đường dẫn full file tại local','đường dẫn full file trên server')
		file=sftp.put('Extract_contacts_full20190301_tuy.csv','/u02/oracle/utl/extract/Extract_contacts_full20190301_tuy123.tcsv')
	sftp.close()
	print('Succeed')
except Exception as e:
	print('Error connect sfth Irdeto')

Như vậy là thành công, các bạn có thể tích hợp nó trong follow job của bạn như sau khi tạo file hoặc khi chuyển file xong thì gửi email…