网站开发设计的难点,做网站的技术,2013网站建设方案,泉州建站服务前言
在这个时代#xff0c;我们选择的人生目标已丰富多彩#xff0c;秉持的人生态度也千差万别#xff1a; 除了吃喝玩乐#xff0c;还有科技探索#xff1b; 除了CityWalk#xff0c;还有“BookWalk”#xff1b; 除了走遍中国#xff0c;还有走遍世界#xff1b; …前言
在这个时代我们选择的人生目标已丰富多彩秉持的人生态度也千差万别 除了吃喝玩乐还有科技探索 除了CityWalk还有“BookWalk” 除了走遍中国还有走遍世界 凡此种种选择和坚持都是为了播下一粒种子期望一树梨花。
好了我们暂且按下其他不表言归正传。 在“微服务实战系列”中博主已完成了以下组件的介绍
微服务实战系列之Sentinel微服务实战系列之Token微服务实战系列之Nacos微服务实战系列之Gateway
此时博主不禁灵机一动发起灵魂一问 当我们希望跨时空沟通又要防止别人偷窥干扰应该怎么办 显然以上4个组件不符合要求自然望洋兴叹、无能为力。奈何博主也身不怀绝技自觉闷闷不乐中…
那到底怎么办呢当然有问题就有办法欢迎今天的主人公闪亮登场RSA。 在正式掌握RSA之前我们先了解一下密码学中的基本概念和常用术语。
一、密码学 密码学在西欧语文中源于希腊语kryptós“隐藏的”和gráphein“书写”是研究如何隐密地传递信息的学科。在现代特别指对信息以及其传输的数学性研究常被认为是数学和计算机科学的分支和信息论也密切相关。著名的密码学者Ron Rivest解释道“密码学是关于如何在敌人存在的环境中通讯”自工程学的角度这相当于密码学与纯数学的异同。密码学是信息安全等相关议题如认证、访问控制的核心。密码学的首要目的是隐藏信息的涵义并不是隐藏信息的存在。密码学也促进了计算机科学特别是在于电脑与网络安全所使用的技术如访问控制与信息的机密性。密码学已被应用在日常生活包括自动柜员机的芯片卡、电脑使用者存取密码、电子商务等等。 密码是通信双方按约定的法则进行信息特殊变换的一种重要保密手段。依照这些法则变明文为密文称为加密变换变密文为明文称为脱密变换。密码在早期仅对文字或数码进行加、脱密变换随着通信技术的发展对语音、图像、数据等都可实施加、脱密变换。 1. 安全标准
信息的保密性 Confidentiality 防止信息泄漏给未经授权的人加密解密技术信息的完整性 Integrity 防止信息被未经授权的篡改消息认证码数字签名认证性 Authentication 保证信息来自正确的发送者消息认证码数字签名不可否认性 Non-repudiation 保证发送者不能否认他们已发送的消息数字签名
2. 基本术语
密钥分为加密密钥和解密密钥。明文没有进行加密能够直接代表原文含义的信息。密文经过加密处理处理之后隐藏原文含义的信息。加密将明文转换成密文的实施过程。解密将密文转换成明文的实施过程。密码算法密码系统采用的加密方法和解密方法随着基于数学密码技术的发展加密方法一般称为加密算法解密方法一般称为解密算法。加密(encryption算法将普通信息明文,plaintext转换成难以理解的资料密文,ciphertext的过程解密(decryption算法则是其相反的过程由密文转换回明文加解密包含了这两种算法一般加密即同时指称加密(encrypt或encipher与解密(decrypt或decipher的技术。 二、RSA
初步学习了密码学的基本知识后接下来我们该谈谈今天的主人公——RSA了。 不过博主今天不谈数论不谈公式只带着各位盆友了解RSA是怎么理论联系实际的。
1. 名词解释 RSA一般指RSA加密算法。RSA加密算法是一种非对称加密算法。在公开密钥加密和电子商业中RSA被广泛使用。1977年由罗纳德·李维斯特(Ron Rivest)、阿迪·萨莫尔(Adi Shamir)和伦纳德·阿德曼(Leonard Adleman)一起提出的。RSA就是他们三人姓氏开头字母拼在一起组成的。 这里提到一个关键的词非对称加密算法。这是个什么东东继续名词解释。 公钥加密也叫非对称密钥加密public key encryption属于网络安全二级学科指的是由对应的一对唯一性密钥即公开密钥和私有密钥组成的加密方法。 它解决了密钥的发布和管理问题是商业密码的核心。在公钥加密体制中没有公开的是私钥公开的是公钥。 纵观以上定义我们发现RSA原来是靠一组密钥对在工作。 简言之公钥即public key可以公开的密钥私钥即private key不可公开的密钥。
2. 工作原理
首先在RSA的世界里请记住一个口诀公钥加密私钥解密。请看以下大屏幕 由乙方可以理解为密钥对创建人私钥自己保管公钥向甲方开放。 当甲方需要向乙方传输消息时可以使用乙方提供的公钥进行加密如此便可防止“偷窥者”干扰进而避免敏感数据泄密。乙方收到消息后可以使用自己保管的私钥进行解密实现数据利用。
3. 实际应用
在我们实际应用场景中大致分几步完成RSA的加密和解密。
3.1 创建密钥对KeyPair
KeyPairGenerator keyPairGenerator KeyPairGenerator.getInstance(RSA);
//初始化
keyPairGenerator.initialize(1024);//RSA默认长度推荐至少1024
//获取密钥对
KeyPair keyPair keyPairGenerator.generateKeyPair();3.2 获取公钥publicKey
RSAPublicKey publicKey (RSAPublicKey) keyPair.getPublic();3.3 获取私钥privateKey
RSAPrivateKey privateKey (RSAPrivateKey) keyPair.getPrivate();3.4 加密
public static String encrypt(String data, PublicKey publicKey) throws Exception {Cipher cipher Cipher.getInstance(RSA);cipher.init(Cipher.ENCRYPT_MODE, publicKey);int inputLen data.getBytes().length;ByteArrayOutputStream out new ByteArrayOutputStream();int offset 0;byte[] cache;int i 0;// 对数据分段加密while (inputLen - offset 0) {if (inputLen - offset 117) {cache cipher.doFinal(data.getBytes(), offset, 117);} else {cache cipher.doFinal(data.getBytes(), offset, inputLen - offset);}out.write(cache, 0, cache.length);i;offset i * 117;}byte[] encryptedData out.toByteArray();out.close();// 加密后的字符串,并以UTF-8为标准转化成字符串return new String(Base64.encodeBase64Str(encryptedData));}3.5 解密
public static String decrypt(String data, PrivateKey privateKey) throws Exception {Cipher cipher Cipher.getInstance(RSA);cipher.init(Cipher.DECRYPT_MODE, privateKey);byte[] dataBytes Base64.decode(data);int inputLen dataBytes.length;ByteArrayOutputStream out new ByteArrayOutputStream();int offset 0;byte[] cache;int i 0;// 对数据分段解密while (inputLen - offset 0) {if (inputLen - offset 128) {cache cipher.doFinal(dataBytes, offset, 128);} else {cache cipher.doFinal(dataBytes, offset, inputLen - offset);}out.write(cache, 0, cache.length);i;offset i * 128;}byte[] decryptedData out.toByteArray();out.close();// 解密后的内容 return new String(decryptedData, UTF-8);}综上关于如何使用RSA加密算法进行数据传输已完成相关介绍希望有助于各位盆友理解并学会如何使用它。 结语
通过以上叙述期望各位盆友可以一文学会如何使用RSA加密和解密。当然RSA绝技显然不止于此。让我们一步一步走向胜利享受知识带来的快乐吧GoodNight