一)概述

什么是互联网支付?

当支付遇到互联网,一场革命自然不可避免。成为现实的是传统的现金支付已经“退居二线”,各种在线支付方式成为人们日常消费的主要支付方式。银行推出的网银以及第三方支付公司推出的各种各样的支付平台大大方便了人们的生活,互联网支付终端也从桌面电脑扩展到移动终端和电视等多种形式的终端上,互联网支付变得无处不在。终端是支付工具,互联网是载体,支付终端除了目前常见的POS机,智能手机、智能电视、平板电脑、PC机等都是越来越普遍的支付终端。

什么是密码学?

现代密码学研究信息从发端到收端的安全传输和安全存储,是研究“知己知彼”的一门科学。其核心是密码编码学和密码分析学。前者致力于建立难以被敌方或对手攻破的安全密码体制,即“知己”;后者则力图破译敌方或对手已有的密码体制,即“知彼”。编码密码学主要致力于信息加密、信息认证、数字签名和密钥管理方面的研究。信息加密的目的在于将可读信息转变为无法识别的内容,使得截获这些信息的人无法阅读,同时信息的接收人能够验证接收到的信息是否被敌方篡改或替换过;数字签名就是信息的接收人能够确定接收到的信息是否确实是由所希望的发信人发出的;密钥管理是信息加密中最难的部分,因为信息加密的安全性在于密钥。历史上,各国军事情报机构在猎取别国的密钥管理方法上要比破译加密算法成功得多。

二)互联网支付的安全隐患

  1. 网络支付系统的不稳定(中断);
  2. 隐私支付信息(比如:卡号、有效期、CVV2以及身份信息,比如:身份证号码、手机号码等)在网络传输过程中被窃取或盗用(窃取/截取);
  3. 支付信息被篡改(篡改);
  4. 信息假冒:冒充他人身份,发送假冒信息(伪造/捏造);
  5. 否认已经做过的交易(比如:在A平台或A银行做的交易结果收到的交易确认信息却是B平台或B银行发来的)。

三)互联网支付的安全需求

1、支付的可靠性;

2、支付的真实性;

3、支付的机密性;

4、支付的完整性;

5、支付的不可抵赖性。

四)互联网支付数据机密性技术

1、对称加密算法:采用单钥密码系统的加密方法,同一个密钥可以同时用作信息的加密和解密,这种加密方法称为对称加密。

典型的对称加密算法如下:

1.1、AES:(Advanced Encryption Standard)高级加密标准,在密码学中又称Rijndael加密法,是美国联邦政府采用的一种区块加密标准;

一个用.NET实现的AES加密代码:

 1         /// <summary>
 2         /// 有密码的AES加密
 3         /// </summary>
 4         internal static string AesEncrypt(string toEncrypt)
 5         {
 6             var keyArray = ConvertBinaryToByte(ConvertStringToBinary(Md5Hex(Configs.PartnerKey)));
 7             var toEncryptArray = Encoding.GetEncoding(Consts.Charset).GetBytes(toEncrypt);
 8             using (var acsp = new AesCryptoServiceProvider {KeySize = 128, BlockSize = 128})
 9             {
10                 acsp.GenerateIV();
11                 using (var aes = new AesCryptoServiceProvider {Key = keyArray, IV = acsp.IV, Mode = CipherMode.ECB, Padding = PaddingMode.PKCS7})
12                 {
13                     byte[] resultArray;
14                     using (var cTransform = aes.CreateEncryptor())
15                     {
16                         resultArray = cTransform.TransformFinalBlock(toEncryptArray, 0, toEncryptArray.Length);
17                     }
18                     return Convert.ToBase64String(resultArray);
19                 }
20             }
21         }

1.2、DES:(Data Encryption Standard),是一种使用密钥加密的块算法,1977年被美国联邦政府的国家标准局确定为联邦资料处理标准(FIPS),并授权在非密级政府通信中使用,随后该算法在国际上广泛流传开来。

一个用.NET实现的DES加密代码:

 1         public static byte[] DesEncryptToByte(string plain, string key, PaddingMode padding = PaddingMode.PKCS7, CipherMode mode = CipherMode.CBC, string codeName = "utf-8")
 2         {
 3             if (string.IsNullOrWhiteSpace(key)) throw new Exception("密钥不能为空");
 4             if (key.Length != 8) throw new Exception("密钥长度必须是8位");
 5             var encoding = Encoding.GetEncoding(codeName);
 6             byte[] bk = encoding.GetBytes(key);
 7             using (DESCryptoServiceProvider des = new DESCryptoServiceProvider())
 8             {
 9                 des.IV = bk;
10                 des.Key = bk;
11                 des.Padding = padding;
12                 des.Mode = mode;
13
14                 byte[] pk = encoding.GetBytes(plain);
15                 using (MemoryStream ms = new MemoryStream())
16                 {
17                     using (CryptoStream cs = new CryptoStream(ms, des.CreateEncryptor(), CryptoStreamMode.Write))
18                     {
19                         cs.Write(pk, 0, pk.Length);
20                         cs.FlushFinalBlock();
21                         byte[] result = ms.ToArray();
22                         ms.Close();
23                         return result;
24                     }
25                 }
26             }
27         }

1.3、3DES(TrippleDES):是三重数据加密算法(TDEA,Triple Data Encryption Algorithm)块密码的通称。它相当于是对每个数据块应用三次DES加密算法(一般是:加密+解密+加密)。由于计算机运算能力的增强,原版DES密码的密钥长度变得容易被暴力破解;3DES即是设计用来提供一种相对简单的方法,即通过增加DES的密钥长度来避免类似的攻击,而不是设计一种全新的块密码算法。

一个用.NET实现的3DES代码:

 1         public static byte[] TripleDesEncrypt(byte[] plain, byte[] key, byte[] iv, PaddingMode padding = PaddingMode.PKCS7, CipherMode mode = CipherMode.CBC)
 2         {
 3             using (TripleDESCryptoServiceProvider des = new TripleDESCryptoServiceProvider())
 4             {
 5                 if (iv != null) des.IV = iv;
 6                 des.Key = key;
 7                 des.Padding = padding;
 8                 des.Mode = mode;
 9
10                 using (MemoryStream ms = new MemoryStream())
11                 {
12                     using (CryptoStream cs = new CryptoStream(ms, des.CreateEncryptor(key, iv), CryptoStreamMode.Write))
13                     {
14                         cs.Write(plain, 0, plain.Length);
15                         cs.FlushFinalBlock();
16                         byte[] result = ms.ToArray();
17                         ms.Close();
18                         return result;
19                     }
20                 }
21             }
22         }

2、非对称加密算法:非对称加密算法需要两个密钥来进行加密和解密,这两个密钥是公开密钥(public key,简称公钥)和私有密钥(private key,简称私钥)。目前最为著名的公钥算法为:RSA。非对称加密可以解决数据的否认与抵赖以及身份认证等问题。

2.1、常见的RSA公私钥文件格式:

Format     

Name

Description

PKCS #7

Cryptographic Message Syntax Standard

A PKCS #7 file can be used to store certificates, which is a SignedData structure without data (just the certificates). The file name extension is usually .p7b, .p7c

PKCS #8

Private-Key Information Syntax Standard.

Used to carry private certificate keypairs (encrypted or unencrypted).

PKCS #12

Personal Information Exchange Syntax Standard.

Defines a file format commonly used to store private keys with accompanying public key certificates, protected with a password-based symmetric key. It is the successor to PFX from Microsoft.

DER

Distinguished Encoding Rules

A binary format for keys or certificates. It is a message transfer syntax specified by the ITU in X.690.

PEM

Privacy Enhanced Mail

Base64 encoded DER certificates or keys, with additional header and footer lines.

The PEM private key format uses the header and footer lines: 
-----BEGIN RSA PRIVATE KEY----- 
-----END RSA PRIVATE KEY-----

The PEM public key format uses the header and footer lines: 
-----BEGIN PUBLIC KEY----- 
-----END PUBLIC KEY-----

The PEM certificate uses the header and footer lines: 
-----BEGIN CERTIFICATE----- 
-----END CERTIFICATE-----

2.2、常用的生成RSA公私钥文件的工具

①OpenSSL

②Java自带的KeyTool工具。

OpenSSL生成相关证书文件(公私钥文件)的操作方法,请见我的其它文章:http://www.cnblogs.com/frankyou/tag/RSA/

四)互联网支付数据完整性技术

1、数字摘要技术(Message Digest):

数字摘要是将任意长度的消息变成固定长度的短消息,它类似于一个自变量是消息的函数,也就是Hash函数。数字摘要就是采用单项Hash函数将需要加密的明文“摘要”成一串固定长度(128位)的密文这一串密文又称为数字指纹,它有固定的长度,而且不同的明文摘要成密文,其结果总是不同的,而同样的明文其摘要必定一致。数字摘要是不可逆的。

通过比对摘要后的数据来判断原始支付报文数据在网络传输过程中是否有被篡改、是否完整和一致。

2、常用的数字摘要算法

 2.1、MD5(Message Digest Algorithm),为计算机安全领域广泛使用的一种散列函数,用以提供消息的完整性保护;

一个用.NET实现的MD5摘要算法:

1         public static string Md5HexString(string plain, Encoding encoding)
2         {
3             using (MD5 md5 = new MD5CryptoServiceProvider())
4             {
5                 var bysHash = md5.ComputeHash(encoding.GetBytes(plain));
6                 var md5HexString = BitConverter.ToString(bysHash);
7                 return md5HexString.Replace("-", string.Empty).ToLower();
8             }
9         }

2.2、SHA(Secure Hash Algorithm)家族的五个算法:分别是SHA-1、SHA-224、SHA-256、SHA-384,和SHA-512,后四者有时并称为SHA-2.SHA-1在许多安全协议中广泛使用,包括TLS和SSL、PGP、SSH、S/MIME和IPsec.在2005年,密码学家就证明SHA-1的破解速度比预期提高了2000倍,虽然破解仍然是极其困难和昂贵的,但随着计算机变得越来越快和越来越廉价,SHA-1算法的安全性也逐年降低,已被密码学家严重质疑,希望由安全强度更高的SHA-2替代它。

一个用.NET实现的SHA-1摘要算法:

1         public static byte[] Sha1Encrypt(string plain, Encoding encoding)
2         {
3             byte[] data = encoding.GetBytes(plain);
4             using (SHA1 sha1 = new SHA1CryptoServiceProvider())
5             {
6                 return sha1.ComputeHash(data, 0, data.Length);
7             }
8         }

 3、数字摘要算法的总结

  3.1、哈希算法是一个单向不可逆的数学算法;

3.2、对任何长度的信息报文,HASH能生成固定长度的信息摘要;

3.3、同样的信息报文,其生成的摘要必定一致。

五)互联网支付数据真实性技术

1、数字签名:身份互信的解决方案

公开密钥加密算法+数字摘要技术,数字签名技术最重要的应用领域是身份认证,身份认证的作用是对用户的身份进行鉴权,是网络安全管理的重要基础。身份认证可以单向的(服务端对客户的端进行身份识别和认证),也可以是双向的(客户端和服务器端互相认证)。

2、数字证书:数字签名付诸实践的强有力的保障手段

数字证书,一般又会称为:CA证书,它是由权威机构——CA机构,又称为证书授权(Certificate Authority)中心发行的,人们可以在网上用它来识别对方的身份,保证对方身份的真实性。

CA证书的生成过程:

通过HTTPS访问网站时,CA颁发的公钥证书可以让主流的浏览器获取信任并采用预定的算法进行加密和签名。证书公钥文件在Client与Server通过TSL/SSL协议进行握手时由Sever端下发给Client,接下来Client会通过证书公钥对证书进行验签同时也会校验证书其它的相关信息:是否可信任、是否与当前域名匹配、是否在有效期内,是否被吊销等。

 3、SSL协议都做了写什么?

3.1、机密性:交易双方在定了会话密钥后,所有的消息都将会被加密;

3.2、完整性:通过数字签名、数字摘要等技术保证了传输信息的完整性;

3.3、认证性:在SSL握手层,双方交换数字证书,验证和保证对方身份的合法性。

总结:互联网支付,安全是基石。

帮助到您了吗?

打赏作者(支付宝):

转载于:https://www.cnblogs.com/frankyou/p/5670805.html

【原创】浅析密码学在互联网支付中的应用|RSA,Hash,AES,DES,3DES,SHA1,SHA256,MD5,SSL,Private Key,Public Key...相关推荐

  1. 【加密算法】RSA和AES在项目中的使用

    对称加密(也叫私钥加密)指加密和解密使用相同密钥的加密算法.它要求发送方和接收方在安全通信之前,商定一个密钥.对称算法的安全性依赖于密钥,泄漏密钥就意味着任何人都可以对他们发送或接收的消息解密,所以密 ...

  2. 一文看懂互联网支付系统架构

    一.支付系统的简介 什么是支付系统?自古以来,所有的商业活动都会伴随着经济的收款与付款行为.随着时代的发展,记录收付款行为的方式不断迭代:古代的钱庄通过手工(算盘)记账,工业社会通过收银机机械记账-- ...

  3. “流支付”掀起互联网支付创新浪潮,SAK支付白皮书揭秘

    比特币,一个互联网技术与货币发行相结合的产物,带给我们区块链技术和DAC(Distributed Autonomous Corporation分布式自治系统)思想.鲨鱼币(简称SAK)的诞生是基于比特 ...

  4. 网络推广外包浅析为什么网络推广外包中网站优化比百度竞价更友好?

    在当前互联网营销市场竞争中,企业网站想要获取自然排名非常不易,大部分网站都是通过网站优化技术或百度竞价等方式实现企业网站中的排名.随着互联网市场中关键词检索竞争日趋激烈,导致网站排名出现两种结果,一是 ...

  5. 互联网支付系统概要设计

    互联网支付系统概要设计 原文:互联网支付系统概要设计 在互联网产品运营中,有很多小伙伴或许会遇到这样的困扰:产品好不容易推出来了,流量成本节节攀升,用户的活跃度.留存度却持续下降.因此在瞬息万变的互联 ...

  6. 第三方互联网支付的主要类型

    一种是独立支付网关模式.该支付模式是指第三方支付公司为用户提供订单处理和支付服务的平台.第三方支付第三方支付平台本身不会开立独立的商业网站,并分别通过消费者.商户和银行签订合同并提供服务.服务平台通常 ...

  7. 移动互联网行业中最具潜力的20大酷模式

    移动互联网行业中最具潜力的20大酷模式 无论是创业者眼中的明星公司Color.投资商眼中代表未来的模式SoLoMo,还是苹果设想的iCloud,所有目标都指向一点:那就是未来的移动互联网!资本跃跃欲试 ...

  8. Java互联网支付系统源码,基于SpringBoot,含支付宝,微信,银联详细代码案例

    spring-boot-pay 支付服务:支付宝,微信,银联详细 代码案例 (支付宝和微信支付测试均需要企业认证,如果没有企业推荐使用 [服务商模式] 申请开通个人商户 也可以测试 ),项目启动前请仔 ...

  9. 互联网金融中可做的17个模型

    欢迎关注 ,专注Python.数据分析.数据挖掘.好玩工具! 模型的使用有助于帮助获得相应数据,进而推动业务目标的实现.与此同时,模型的使用需要依据业务核心目标来确定.本篇文章里,总结了互联网金融可做 ...

最新文章

  1. 马尔可夫模型与条件随机场模型
  2. python界面设计实例-Python GUI项目实战:主窗体的界面设计与实现
  3. 回溯法(深度优先)剪枝和分支限界法(宽度优先)剪枝对比:01背包问题
  4. 流程图怎么切换_PPT中「较长的流程图」该如何清晰展现?
  5. php实现ssh客户端,php无阻塞SSH客户端实例
  6. 5G、IoT 爆发前夕,我们必须了解的操作系统! | 码书
  7. Windows 下安装Python包(Numpy)的错误:Unable to find vcvarsall.bat
  8. 百万在线的美拍直播弹幕系统架构实现
  9. matlab实现螺旋谱分解,MATLAB实现EMD分解及希尔伯特谱分析
  10. 每日单词20110501
  11. 使用ShareSDK实现QQ登录和分享操作
  12. 【猴博士】概率论与数理统计 笔记总结(完结)
  13. 四种编程命名规则:驼峰命名法,帕斯卡命名法,匈牙利命名法,下划线命名法
  14. 学网络安全到什么程度才能找到工作?
  15. 处理el获取session值:严重: Servlet.service() for servlet [LoginServlet] in context with path [/LDMS]...
  16. hbuilder php断点调试,Hbuilder配置php断点调试
  17. Java小数点数字和百分号数字之间的转换
  18. 研发效能度量框架解读
  19. 威海南海新区首届“龙腾齐鲁”龙王争霸赛开赛
  20. 生财有术第六期开放:何以解忧,唯有实战

热门文章

  1. Apollo开发平台授权管理的使用
  2. mysql-笔记-命名、索引规范
  3. linux下查看mysql安装的版本
  4. python 生成器读取文件
  5. [吴恩达机器学习笔记]14降维3-4PCA算法原理
  6. 安装构建以太坊钱包Parity
  7. 网路游侠:铱迅软件版WEB应用防火墙试用
  8. memcached演练(2) 访问memcached服务
  9. iOS uuchart 用法
  10. 产品经理应聘之感受漫谈