0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

如何保证数据在传输的过程中是安全的呢

冬至配饺子 来源:希夏普 作者:jqwang 2022-08-19 11:06 次阅读

如果用户 A 要和 B 进行数据交换,A 要通过网络发送一段文字给 B,那如何保证数据在传输的过程中是安全的呢?并且即使被别人截获,也无法知道数据的内容,这就用到加密技术。

对称密码体制

发送方用一个密钥对数据进行加密,接收方使用相同的密钥进行解密。

• 加密和解密 的密钥相同

• 如何获取或交换密钥,保证密钥的私密性非常重要

• 密钥量级是参与者的平方级数,数量比较多

• 适合对大量数据进行加密,加密解密速度快

• 加解密易于通过硬件实现

非对称密码体制

每个网络参与者都有一对密钥 - 私钥和公钥。用户 A 的公钥是公开的,任何与 A 通信的人都可以获取,用来加密数据后发送给 A。A 的私钥只有自己知道,用来解密数据。

• 公钥用来加密,私钥用来解密。公私钥不相同也不相关

• 公钥的交换无需保密

• 密钥的量级为参与者的数目

• 加解密速度慢,不适合大量数据加密,常用于 对称密码 协商共享密钥

• 加解密操作难以通过硬件实现

数字签名

用户 A 发送给 B,B 如何确定数据是用户 A 发送的,而不是别人伪造的数据呢?数字签名可以鉴别消息的发送者

• 用户 A 先将要发送的数据进行 MD5 计算生成唯一的 消息摘要 a

• A 用私钥签名消息摘要 a

• A 把数据和消息摘要 a 组合起来发送给 B

• B 收到后用 A 的公钥对消息摘要验签得到 a

• B 用 MD5 算法对数据部分进行计算得到消息摘要 b

• B 对 a 和 b 进行比较。如果相同则证明是 A 发送过来的

A 计算数据的消息摘要,并用私钥进行加密的过程称为 签名算法。B 用 A 的公钥解密消息摘要,并与自己计算的消息摘要进行对比的过程称为 验证算法。

如果直接对数据本身直接计算数字签名,会比较耗时。所以一般做法是先将原数据进行 Hash 运算,得到的 Hash 值就叫做“摘要”。

数字证书

用户 A 要给用户 B 发送数据,如何保证用户 A 拿到的一定是用户 B 的公钥呢?

数字证书是标志通讯各方身份信息的一串数字,不是数字身份证而是身份认证机构盖在数字身份证上的一个章或印。由权威机构-CA(Certificate Authority)发行的,用来识别对方的身份。

X.509是一种通用的证书规范。

常见的数字证书格式:

• .cer .crt - 用于存放证书,它是二进制形式存放的,不含私钥。

• .pfx .p12 - 存放个人证书/私钥,通常包含保护密码,2 进制方式

从证书文件获得证书对象:

X509Certificate2 cert = new X509Certificate2 (@"c:/myCert.crt" );

// 保护密码

String password = GetCertPassword();
X509Certificate2 cert = new X509Certificate2 (@"c:/myCert.pfx", password);
从本地证书容器获得证书对象:

private static X509Certificate2 GetCertificateFromStore(string certName)
{

// Get the certificate store for the current user.
X509Store store = new X509Store(StoreLocation.CurrentUser);
try
{
store.Open(OpenFlags.ReadOnly);

// Place all certificates in an X509Certificate2Collection object.
X509Certificate2Collection certCollection = store.Certificates;
// If using a certificate with a trusted root you do not need to FindByTimeValid, instead:
// currentCerts.Find(X509FindType.FindBySubjectDistinguishedName, certName, true);
X509Certificate2Collection currentCerts = certCollection.Find(X509FindType.FindByTimeValid, DateTime.Now, false);
X509Certificate2Collection signingCert = currentCerts.Find(X509FindType.FindBySubjectDistinguishedName, certName, false);
if (signingCert.Count == 0)
return null;
// Return the first certificate in the collection, has the right name and is current.
return signingCert[0];
}
finally
{
store.Close();
}
}
// 验证证书有效期
if (cert.NotAfter <= DateTime .Now)
{
throw new ApplicationException (" 用户证书已经过期!" );
}
// 获取公钥
RSA publickKey = (RSA)cert.PublicKey.Key;
RSA privateKey = cert.GetRSAPrivateKey();
public class RSAHelper
{
/// RSA加密
///
///公钥
///
///
public static string RSAEncrypt(string xmlPublicKey, string m_strEncryptString)
{
RSACryptoServiceProvider provider = new RSACryptoServiceProvider();
provider.FromXmlString(xmlPublicKey);
byte[] bytes = new UnicodeEncoding().GetBytes(m_strEncryptString);
return Convert.ToBase64String(provider.Encrypt(bytes, false));
}

///


/// RSA解密
///
///私钥
///
///
public static string RSADecrypt(string xmlPrivateKey, string m_strDecryptString)
{
RSACryptoServiceProvider provider = new RSACryptoServiceProvider();
provider.FromXmlString(xmlPrivateKey);
byte[] rgb = Convert.FromBase64String(m_strDecryptString);
byte[] bytes = provider.Decrypt(rgb, false);
return new UnicodeEncoding().GetString(bytes);
}

}



审核编辑:刘清

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 密钥
    +关注

    关注

    1

    文章

    119

    浏览量

    19588
  • 加密技术
    +关注

    关注

    0

    文章

    141

    浏览量

    17268
  • 加解密
    +关注

    关注

    0

    文章

    16

    浏览量

    6476
收藏 人收藏

    评论

    相关推荐

    请问NFC数据传输如何保证数据安全

    NFC数据传输如何保证数据安全
    发表于 04-07 06:18

    如何确保DMA传输过程中数据都是好的?

    有没有哪位大佬清楚DMA原理的 想请教下,芯片厂是如何确保DMA传输过程中数据都是OK的 比如传输前后SRAM里面的数据不变,传输出来的
    发表于 04-12 06:23

    热敏打印机打出数据电流传输过程中的获取

    热敏打印机打出数据电流传输过程中的获取,什么样的设备效果最好
    发表于 05-02 23:25

    如何减少SPDIF传输过程中时钟抖动

    `数字音频信号传输相对于模拟音频信号,有着巨大的优势,它具有很强的抗干扰能力,无需考虑失真、噪声、抖晃,串音的因素对传输的影响。但是,数字音频信号传输过程中,却存在着抖动现象。 有资
    发表于 09-28 16:08

    转:如何减少SPDIF传输过程中时钟抖动

    `数字音频信号传输相对于模拟音频信号,有着巨大的优势,它具有很强的抗干扰能力,无需考虑失真、噪声、抖晃,串音的因素对传输的影响。但是,数字音频信号传输过程中,却存在着抖动现象。 有资
    发表于 09-28 16:28

    stm32的DMA在数据传输过程中扮演什么角色?

    看了stm32的DMA介绍,知道是一个传输数据的通道谁能讲具体点,它在数据传输过程中扮演什么角色比如我的SD卡用了DMA,是它把数据读取后给CPU还是怎么的不明白啊,大神指点
    发表于 08-13 08:00

    如何保证脉冲信号传输的完整性?

    如何保证脉冲信号传输的完整性,减少信号传输过程中产生的反射和失真,已成为当前高速电路设计不可忽视的问题。 
    发表于 04-07 06:53

    有什么办法能解决高速数据采样、传输过程中遇到的问题?

    有什么办法能解决高速数据采样、传输过程中遇到的问题?才能不浪费单片机或DSP的端口资源 。
    发表于 04-08 07:07

    如何保证数据传输过程中安全(防窃取)?

    实际的业务,难免会跟第三方系统进行数据的交互与传递,那么如何保证数据
    发表于 07-28 06:27

    常用的一些API设计的安全方法探讨

    如何保证数据传输过程中安全(防窃取)?有没有通用的一套算法以及规范来
    发表于 10-19 10:04

    调试Bluepill的过程中遇到了哪些问题

    为什么叫Bluepill?调试Bluepill的过程中遇到了哪些问题?有什么方法可以去实现Arduino IDE兼容STM32
    发表于 11-05 07:19

    I/O端口或内部电路信号传输过程中采用隔离的方式

    电子产品设计,为了截断产品内部电路与外界的干扰传输通道,或出于安全隔离的考虑,通常会在I/O端口或内部电路信号传输过程中采用隔离的方式,
    发表于 11-11 06:32

    串口通信的过程中是怎么对数据进行校验的?

    串口通信的过程中怎么对数据进行校验
    发表于 10-11 07:13

    串口传输过程中停止位是一个什么数据

    串口传输过程中停止位是一个什么数据
    发表于 10-12 07:23

    modbus通信的过程中如何实现大数据包的传输

    modbus通信的过程中如何实现大数据包的传输
    发表于 10-15 12:23