Công nghệ được lựa chọn như sau:
• Web: ASP.Net
• Các thành phần còn lại như plugin, thư viện mã hóa, ứng dụng ngân hàng cũng được xây dựng bằng ngôn ngữ .Net
Một số đoạn mã
Tạo khoá
public void GenKey() {
Random rand = new Random(); do { d.value.genRandomBits((int)N.value.GetMaxDegree() +1,rand); } while (d.value.ToString(2).Length< 160); Q = G.PointMultiplyG(d); } Tạo chữ ký:
publicPrimeFiniteField[] GenSignature(string message) {
Point TempPoint = newPoint();
string HashedMessage = SimpleHash.ComputeHash(message, "SHA1", Salt);
System.Text.UTF8Encoding ue = new System.Text.UTF8Encoding(); byte[] bytes=ue.GetBytes(HashedMessage);
Console.WriteLine("E" + e.ToString()); PrimeFiniteField k = newPrimeFiniteField(); Random rand = newRandom();
PrimeFiniteField r = newPrimeFiniteField(); PrimeFiniteField s = newPrimeFiniteField(); do { do { do {
k.value.genRandomBits((int)N.value.GetMaxDegree() + 1, rand);
}
while ((k.value == 0) || (k.value >= N.value)); TempPoint = G.PointMultiplyG(k);
r.value = TempPoint.x.value.PositiveMod(N.value); }
while (r.value == 0);
s.value = (e.AddModulo(d.MultiplyModulo(r, N.value), N.value)).MultiplyModulo(k.InverseModulo(N.value), N.value).value;
}
while (s.value == 0);
Console.WriteLine(r.value.ToString()); Console.WriteLine(s.value.ToString()); returnnewPrimeFiniteField[] { r, s }; }
Xác thực chữ ký:
publicbool VerifySignature(string message, PrimeFiniteField r, PrimeFiniteField s) {
Point TempPoint = newPoint();
if ((r.value < 0) || (r.value >= N.value)) returnfalse; if ((s.value < 0) || (s.value >= N.value)) returnfalse;
string HashedMessage = SimpleHash.ComputeHash(message, "SHA1", Salt);
System.Text.UTF8Encoding ue = new System.Text.UTF8Encoding(); byte[] bytes = ue.GetBytes(HashedMessage);
PrimeFiniteField e = newPrimeFiniteField(bytes);
Console.WriteLine("E" + e.ToString()); PrimeFiniteField w = newPrimeFiniteField(); w = s.InverseModulo(N.value);
PrimeFiniteField u1 = newPrimeFiniteField(); PrimeFiniteField u2 = newPrimeFiniteField(); PrimeFiniteField v = newPrimeFiniteField(); u1= e.MultiplyModulo(w, N.value);
u2 = r.MultiplyModulo(w, N.value); Point X = newPoint();
X = G.PointMultiplyG(u1).addP192(Q.PointMultiply(u2)); if ((X.x.value == 0) || (X.y.value == 0)) returnfalse; else { v.value = X.x.value.PositiveMod(N.value); if (v.value == r.value) returntrue;
elsereturnfalse; }
}
Một số giao diện chương trình
Trang chỉnh sửa thông tin của giao dịch đã tạo ra, có thể ký trực tiếp lên giao dịch này.
CHƯƠNG VI. ĐÁNH GIÁ VÀ KẾT LUẬN
Tổng kết lại các kết quả đã đạt được, tập trung trờn cỏc kết quả quan trọng nhất.
Nhận xét và đánh giá các kết quả đạt được.
Phân tích các thiếu sót và đề xuất các phương pháp cải thiện cũng như phương hướng phát triển tiếp theo mà đồ án hướng tới.