首页 文章 精选 留言 我的

精选列表

搜索[Java],共10000篇文章
优秀的个人博客,低调大师

Java工具类之在服务器发送HTTP请求

版权声明:本文为博主原创文章,未经博主允许不得转载。博客源地址为zhixiang.org.cn https://blog.csdn.net/myFirstCN/article/details/80880234 使用之前首先添加maven依赖或者是jar包 <dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId>httpclient</artifactId> <version>4.5.2</version> </dependency> 下面给出工具类代码,一个简单发送Get和Post请求的例子 public class HttpUtils { /* *发送简单post请求 */ public static JSONObject post(String url) { HttpPost post = new HttpPost(url); return getResult(post); } /* *发送带Header的post请求 */ public static JSONObject post(String url, Map<String, String> map) { HttpPost post = new HttpPost(url); if (!map.isEmpty()) { Set<Map.Entry<String, String>> entrys = map.entrySet(); for (Map.Entry<String, String> entry : entrys) { post.setHeader(entry.getKey(), entry.getValue()); } } return getResult(post); } /* *发送带Header的get请求 */ public static JSONObject get(String url, Map<String, String> map) { HttpGet get = new HttpGet(url); if (!map.isEmpty()) { Set<Map.Entry<String, String>> entrys = map.entrySet(); for (Map.Entry<String, String> entry : entrys) { get.setHeader(entry.getKey(), entry.getValue()); } } return getResult(get); } /* *发送简单的get请求 */ public static JSONObject get(String url) { HttpGet get = new HttpGet(url); return getResult(get); } /* *发送请求方法,请求响应为JSONObject */ private static JSONObject getResult(HttpRequestBase requestBase) { CloseableHttpClient httpClient = HttpClients.createDefault(); String result = null; try { result = EntityUtils.toString(httpClient.execute(requestBase).getEntity()); httpClient.close(); } catch (UnsupportedEncodingException e1) { e1.printStackTrace(); } catch (ClientProtocolException e1) { e1.printStackTrace(); } catch (IOException e1) { e1.printStackTrace(); } finally { return new JSONObject(JSON.parseObject(result)); } } /* *当请求响应为String时 */ public static String getString(String url) { CloseableHttpClient httpClient = HttpClients.createDefault(); HttpGet get = new HttpGet(url); String result = null; try { result = EntityUtils.toString(httpClient.execute(get).getEntity()); httpClient.close(); } catch (UnsupportedEncodingException e1) { e1.printStackTrace(); } catch (ClientProtocolException e1) { e1.printStackTrace(); } catch (IOException e1) { e1.printStackTrace(); } finally { return result; } } } 使用之前首先添加maven依赖或者是jar包 <dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId>httpclient</artifactId> <version>4.5.2</version> </dependency> 下面给出工具类代码,一个简单发送Get和Post请求的例子 public class HttpUtils { /* *发送简单post请求 */ public static JSONObject post(String url) { HttpPost post = new HttpPost(url); return getResult(post); } /* *发送带Header的post请求 */ public static JSONObject post(String url, Map<String, String> map) { HttpPost post = new HttpPost(url); if (!map.isEmpty()) { Set<Map.Entry<String, String>> entrys = map.entrySet(); for (Map.Entry<String, String> entry : entrys) { post.setHeader(entry.getKey(), entry.getValue()); } } return getResult(post); } /* *发送带Header的get请求 */ public static JSONObject get(String url, Map<String, String> map) { HttpGet get = new HttpGet(url); if (!map.isEmpty()) { Set<Map.Entry<String, String>> entrys = map.entrySet(); for (Map.Entry<String, String> entry : entrys) { get.setHeader(entry.getKey(), entry.getValue()); } } return getResult(get); } /* *发送简单的get请求 */ public static JSONObject get(String url) { HttpGet get = new HttpGet(url); return getResult(get); } /* *发送请求方法,请求响应为JSONObject */ private static JSONObject getResult(HttpRequestBase requestBase) { CloseableHttpClient httpClient = HttpClients.createDefault(); String result = null; try { result = EntityUtils.toString(httpClient.execute(requestBase).getEntity()); httpClient.close(); } catch (UnsupportedEncodingException e1) { e1.printStackTrace(); } catch (ClientProtocolException e1) { e1.printStackTrace(); } catch (IOException e1) { e1.printStackTrace(); } finally { return new JSONObject(JSON.parseObject(result)); } } /* *当请求响应为String时 */ public static String getString(String url) { CloseableHttpClient httpClient = HttpClients.createDefault(); HttpGet get = new HttpGet(url); String result = null; try { result = EntityUtils.toString(httpClient.execute(get).getEntity()); httpClient.close(); } catch (UnsupportedEncodingException e1) { e1.printStackTrace(); } catch (ClientProtocolException e1) { e1.printStackTrace(); } catch (IOException e1) { e1.printStackTrace(); } finally { return result; } } }

优秀的个人博客,低调大师

Java小工匠聊密码学】--对称加密--概述

1、什么是对称加密 对称加密算法是应用较早的加密算法,技术成熟。在对称加密算法中,数据发信方将明文“原始数据”和“加密密钥“一起经过特殊加密算法处理后,使其变成复杂的加密密文发送出去。收信方收到密文后,若想解读原文,则需要使用加密用过的密钥及相同算法的逆算法对密文进行解密,才能使其恢复成可读明文。在对称加密算法中,使用的密钥只有一个,发收信双方都使用这个密钥对数据进行加密和解密,这就要求解密方事先必须知道加密密钥。 image.png 2、对称密码特点 (1)加密密钥与解密密钥相同,加密算法与解密算法互逆 (2)算法公开、计算量小、加密速度快、加密效率高。 (3)双方使用相同的密钥,安全性得不到保障。 3、对称密码工作模式 (1)ECB:电子密码本 最基本的加密模式,也就是通常理解的加密,相同的明文将永远加密成相同的密文,无初始向量,容易受到密码本重放攻击,一般情况下很少用。 (2)CBC:密码连接 明文被加密前要与前面的密文进行异或运算后再加密,因此只要选择不同的初始向量,相同的密文加密后会形成不同的密文,这是目前应用最广泛的模式。CBC加密后的密文是上下文相关的,但明文的错误不会传递到后续分组,但如果一个分组丢失,后面的分组将全部作废(同步错误)。 (3)CFB:密文反馈 类似于自同步序列密码,分组加密后,按8位分组将密文和明文进行移位异或后得到输出同时反馈回移位寄存器,优点最小可以按字节进行加解密,也可以是n位的,CFB也是上下文相关的,CFB模式下,明文的一个错误会影响后面的密文(错误扩散)。 (4)OFB:输出反馈 将分组密码作为同步序列密码运行,和CFB相似,不过OFB用的是前一个n位密文输出分组反馈回移位寄存器,OFB没有错误扩散问题。 (5) CTR : 计数器 计算器模式不常见,在CTR模式中, 有一个自增的算子,这个算子用密钥加密之后的输出和明文异或的结果得到密文,相当于一次一密。这种加密方式简单快速,安全可靠,而且可以并行加密,但是在计算器不能维持很长的情况下,密钥只能使用一次。 image.png 4、对称密码填充方式 (1) NoPadding (2) PKCS5Padding (3) ISO 10126 5、常用对称加密算法 (1)DES(Data Encryption Standard):数据加密标准,速度较快,适用于加密大量数据的场合; (2)3DES(Triple DES):是基于DES,对一块数据用三个不同的密钥进行三次加密,强度更高; (3)AES(Advanced Encryption Standard):高级加密标准,是下一代的加密算法标准,速度快,安全级别高,目前 AES 标准的一个实现是 Rijndael 算法; 如果读完觉得有收获的话,欢迎点赞、关注、加公众号【小工匠技术圈】 个人公众号,欢迎关注,查阅更多精彩历史! image

优秀的个人博客,低调大师

Java小工匠聊密码学】--消息摘要--概述

1、消息摘要概述 数据摘要算法是密码学算法中非常重要的一个分支,它通过对所有数据提取指纹信息以实现数据签名、数据完整性校验等功能,由于其不可逆性,有时候会被用做敏感信息的加密。 2、消息摘要算法特点 2.1 变成输入、定长输出 无论输入的消息有多长,计算出来的消息摘要的长度总是固定的。例如应用MD5算法摘要的消息有128个比特位,用SHA-1算法摘要的消息最终有160比特位的输出。 2.2 输入不同、摘要不同,输入相同、摘要相同 只要输入的消息不同,对其进行摘要以后产生的摘要消息也必不相同;但相同的输入必会产生相同的输出。这正是好的消息摘要算法所具有的性质:输入改变了,输出也就改变了;两条相似的消息的摘要确不相近,甚至会大相径庭。从理论上来说,不管使用什么样的摘要算法,必然存在2个不同的消息,对应同样的摘要。因为输入是一个无穷集合,而输出是一个有限集合,所以从数学上来说,必然存在多对一的关系。但是实际上,很难或者说根本不可能人为的造出具有同样摘要的2个不同消息。 2.3 单向、不可逆、散列值不同、原始值不同 消息摘要是单向、不可逆的。只能进行正向的信息摘要,而无法从摘要中恢复出任何的原始消息,甚至根本就找不到任何与原信息相关的信息。当然,可以采用强力攻击的方法,即尝试每一个可能的信息,计算其摘要,看看是否与已有的摘要相同,如果这样做,最终肯定会恢复出摘要的消息。但实际上,要得到的信息可能是无穷个消息之一,所以这种强力攻击几乎是无效的。 2.4 “碰撞” 难找到 好的摘要算法,没有人能从中找到“碰撞”,虽然“碰撞”是肯定存在的。即无法找到两条不同消息,但是它们的摘要相同。 3、消息摘要的分类 (1)MD(Message Digest) 消息摘要算法 (2)SHA(Secure Hash Algorithm) 安全散列算法 (3)MAC(Message Authentication Code) 消息认证码算法 4、消息摘要用途 一般地,把对一个信息的摘要称为该消息的指纹或数字签名,信息摘要算法的主要用途是信息完整性校验. 5. 散列算法破解 (1) 算法破解 已知数据A和消息的散列值,找到另外一个数据B和A的散列值相同。例如2005年2月,王小云破解SHA-1 算法。 算法破解 (2) 假破解 根据数据库查询散列值,查询数据对应的明文。数据树数据越多破解的概率越大,例如密码使用md5加密,因为密码长度一般都是1-8位的,所以数据库可以穷举这些值,提供逆向查询。 如果读完觉得有收获的话,欢迎点赞、关注、加公众号【小工匠技术圈】 个人公众号,欢迎关注,查阅更多精彩历史! image

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册