java程序中用户名和密码_在Java应用程序中使用密码术

java程序中用户名和密码

这篇文章描述了如何使用Java密码体系结构 (JCA),该体系结构使您可以在应用程序中使用密码服务。

Java密码体系结构服务

JCA提供了许多加密服务,例如消息摘要和签名 。

这些服务可通过特定于服务的API来访问,例如MessageDigestSignature

密码服务抽象了不同的算法。 例如,对于摘要,可以使用MD5或SHA1 。 您可以将算法指定为加密服务类的getInstance()方法的参数:

MessageDigest digest = MessageDigest.getInstance("MD5");

您可以在“ JCA 标准算法名称文档”中找到算法参数的值。

一些算法具有参数。 例如,生成私钥/公钥对的算法将把密钥大小作为参数。 您可以使用initialize()方法指定参数:

KeyPairGenerator generator = KeyPairGenerator.getInstance("DSA");
generator.initialize(1024);

如果不调用initialize()方法,则将使用某些默认值,该默认值可能是您想要的,也可能不是。

不幸的是,用于初始化的API在服务之间并非100%一致。

例如, Cipher类将init()与指示加密或解密的参数一起使用,而Signature类将initSign()用于签名, initVerify()用于验证。

Java密码学体系结构提供程序

JCA通过提供程序系统使您的代码独立于特定密码算法的实现。

提供商根据可配置的首选项顺序进行排名(请参见下文)。 最佳优先级是1,次佳是2,依此类推。优先级顺序允许JCA选择实现给定算法的最佳可用提供程序。

另外,您可以在getInstance()的第二个参数中指定特定的提供程序:

Signature signature = Signature.getInstance("SHA1withDSA", "SUN");

默认情况下,JRE附带了来自Oracle的一堆提供程序 。 但是,由于历史上的出口限制,这些并不是最安全的实现。 要访问更好的算法和更大的密钥,请安装Java密码学扩展无限强度管辖权策略文件 。

更新 :请注意,以上声明对Oracle JRE是正确的。 OpenJDK没有相同的限制 。

使您可以对密码学进行配置

您应该始终确保应用程序使用的加密服务是可配置的。

如果这样做,则可以在不发布补丁的情况下更改密码算法和/或实现。

当对(一种实现)算法有新的攻击时,这特别有价值。

JCA使配置加密的使用变得容易。

getInstance()方法同时接受算法的名称和实现该算法的提供程序的名称。 您应该从某种配置文件中读取算法参数的值和所有值。

还要确保将代码DRY保留在一个地方并实例化加密服务。

检查所请求的算法和/或提供程序是否实际可用。

当给定的算法或提供程序不可用时, getInstance()方法将引发NoSuchAlgorithmException ,因此您应该捕获该异常。 然后最安全的选择是失败,并请他人确保系统配置正确。 如果在配置错误的情况下继续操作,则可能会导致系统安全性低于要求。

请注意, Oracle建议不要指定提供程序 。 它们提供的原因是,并非所有提供程序都可以在所有平台上使用,并且指定提供程序可能意味着您错过了优化。

您应该权衡这些不利因素和易受攻击的风险。

在您的应用程序中部署具有已知特征的特定提供程序可能会消除Oracle提到的缺点。

添加加密服务提供商

提供程序系统是可扩展的,因此您可以添加提供程序。

例如,您可以使用开源Bouncy Castle或商业RSA BSAFE提供程序。

为了添加提供程序,您必须确保其jar对应用程序可用。 为此,您可以将其放在类路径中。

另外,您也可以将其放置在$JAVA_HOME/lib/ext目录中,使其成为已安装的扩展 ,其中$JAVA_HOME是JDK / JRE发行版的位置。

两种方法之间的主要区别在于,默认情况下, 已安装的扩展被授予所有权限 ,而classpath上的代码则未被授予 。 当您的代码(的一部分)在沙盒中运行时,这非常重要。

某些服务(例如Cipher )要求对提供者jar进行签名 。

下一步是在JCA提供者系统中注册提供者。 最简单的方法是使用Security.addProvider()

Security.addProvider(new BouncyCastleProvider());

您还可以使用Security.insertProviderAt()方法设置提供者的优先顺序:

Security.insertProviderAt (new JsafeJCE(), 1);

这种方法的一个缺点是它将代码耦合到提供程序,因为您必须导入提供程序类。 在OSGi之类的模块化系统中,这可能不是重要问题。

需要注意的另一件事是代码需要SecurityPermission以编程方式添加提供程序。

通过将注册项添加到java.security属性文件(位于$JAVA_HOME/jre/lib/security/java.security ),还可以通过静态注册将提供程序配置为您环境的一部分:

security.provider.1=com.rsa.jsafe.provider.JsafeJCE
security.provider.2=sun.security.provider.Sun

该文件中的属性名称以security.provider.开头security.provider. 并以提供者的偏好结束。 该属性值是实现Provider的类的完全限定名称。

实施您自己的加密服务提供商

不要这样做 。 您弄错它,并且容易受到攻击。

使用加密服务提供者

提供程序的文档应告诉您将哪个提供程序名称用作getInstance()的第二个参数。 例如,Bouncy Castle使用BC ,而RSA BSAFE使用JsafeJCE

大多数提供程序都具有自定义API以及符合JCA的API。 不要使用自定义API,因为那样将无法配置所使用的算法和提供程序。

并非所有算法和实现都是相同的

重要的是要注意,不同的算法和实现具有不同的特性,并且这些特性或多或少会使它们更适合您的情况。

例如,某些组织将仅允许通过FIPS 140-2认证或在NSA Suite B加密算法列表中的算法和实现。

始终确保您了解客户的加密需求和要求。

在OSGi环境中使用JCA

getInstance()方法是使用服务提供者接口 (SPI)的工厂方法 。 这在OSGi世界中是有问题的,因为OSGi违反了SPI框架关于存在单个类路径的假设。

另一个潜在的问题是,JCA需要签名一些jar。 如果这些罐子不是有效的OSGi捆绑包,则不能通过bnd来运行它们,因为这样会使签名无效。

幸运的是,您可以用一块石头杀死两只鸟。 将提供程序jar放在主程序(即启动OSGi框架的程序)的类路径中。

然后使用org.osgi.framework.system.packages.extra系统属性从OSGi系统捆绑包导出提供程序包。 这将使系统捆绑包导出该软件包。

现在,您可以简单地在包中的提供程序Import-Package上使用Import-Package

还有其他的选择 ,因为如果你不能使用上述方案解决这些问题。


参考: Secure Software Development博客上的JCG合作伙伴 Remon Sinnema提供了在Java应用程序中使用加密的信息 。

翻译自: https://www.javacodegeeks.com/2012/12/test-using-cryptography-in-java-applications.html

java程序中用户名和密码

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/350765.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C++ setw和setfill

在C中&#xff0c;setw(int n)用来控制输出间隔。 例如: cout<<s<<setw(8)<<a<<endl; 则在屏幕显示 s a //s与a之间有7个空格&#xff0c;setw()只对其后面紧跟的输出产生作用&#xff0c;如上例中&#xff0c;表示a共占8个位置&#xff0c;不…

Linux快捷键

附上一些其他较长使用的快捷键&#xff1a; ctrl w —往回删除一个单词&#xff0c;光标放在最末尾 ctrl k —往前删除到末尾&#xff0c;光标放在最前面&#xff08;可以使用ctrla&#xff09; ctrl u 删除光标以前的字符 ctrl k 删除光标以后的字符 ctrl a 移动光标至的…

会python基础可以找到工作吗_我大学退学,现在 28 岁,如果零基础开始学 python,可以找到工作吗?...

作为一名IT行业从业者&#xff0c;同时也是一名教育工作者&#xff0c;我来回答一下这个问题。 首先&#xff0c;对于28岁且没有获得大学文凭的初学者来说&#xff0c;要想通过学习Python来找到工作还是具有一定难度的&#xff0c;一方面原因是目前开发岗位通常都有一定的学历要…

测试Java EE 8规范

Java EE 8平台肯定在过去的几个月中一直在发展。 规范已经发布了早期的草案评审&#xff0c;里程碑甚至最终版本。 实际上&#xff0c;随着JSF 2.3的发布&#xff0c;JSR-372才刚刚进入最终版本。 有关更多信息&#xff0c;请参见 Arjan的帖子 。 它有幸成为JSR-372专家组的成…

C++ this

对象a的内存地址和this指针的一模一样(都是0017F7E8)&#xff1b;而当运行到对象b的时候&#xff0c;它的内存地址又和它所对应的this指针指向的内存地址一模一样了(都是0017F7DC)。这就说明了this指针变量记录的是当前对象的内存地址&#xff0c;即this指针指向当前的对象

修改weblogic端口的方法

修改weblogic端口的方法 修改weblogic的端口常用的有两种方法 方法一.登录weblogic的console。如&#xff1a;http://localhost:7001/console/  1).在环境--服务器节点中点击你要修改的服务器的端口的名称(如下图&#xff1a;AdminServer(管理)) 2).上述步骤打开的页面如下图…

什么是JAX-RS注释? (第2部分)

JAX-RS注释概述&#xff08;第2部分&#xff09; 这是一个由三部分组成的系列&#xff0c;介绍了用于实现REST端点的注释。 在JAX-RS注释的第一部分中&#xff0c;您了解了&#xff1a; ApplicationPath批注 Path注释 GET HTTP方法注释 POST HTTP方法注释 PUT HTTP方法…

eclipse 快捷键组合

更多快捷键组合可在Eclipse按下ctrlshiftL查看。 让我们按照使用频率来看看我最爱用的一些热键组合。&#xff08;注&#xff1a;以下内容在Eclipse3.02及一上版本通过测试&#xff09; 1. Control-Shift-T: 打开类型&#xff08;Open type&#xff09;。如果你不是有意磨洋工…

java实体类转map_十五道经典面试题-JAVA基础篇

十五道JAVA基础面试题送给有需要的童鞋&#xff0c;但是不得不多提醒一句&#xff0c;打铁还需自身硬&#xff0c;计算机软件这个行业&#xff0c;技术和学历才是王道。好了&#xff0c;废话不多说&#xff0c;上菜&#xff1a;一&#xff1a;面向对象的特征有哪些方面 1. 抽象…

C++ 指针函数和函数指针

1、指针函数 &#xff08;1&#xff09;基本概念 指针函数&#xff1a;顾名思义就是带有指针的函数&#xff0c;即其本质是一个函数&#xff0c;只不过这种函数返回的是一个对应类型的地址。 &#xff08;2&#xff09;定义式 type *func(type , type) 如&#xff1a;int…

B树

B树是为磁盘或其他直接存储的辅存设备而设计的一种平衡搜索树。 B树类似于红黑树&#xff0c;但在降低磁盘I/O操作数方面要更好一些。许多数据库系统使用B树或者B树的变种来存储信息。 B树与红黑树的不同之处在于B树的结点可以有很多孩子&#xff0c;从数个到数千个。也就是说&…

如何使用recaptcha_在Spring MVC Web应用程序中使用reCaptcha

如何使用recaptchaCAPTCHA是一个程序&#xff0c;可以生成人类可以通过但计算机程序“ 不能 ”通过的测试并对其进行评分。 所采取的策略之一是向用户显示具有扭曲文本的图像&#xff0c;并且用户应在输入区域中书写文本。 如果显示的文字与用户输入的文字相同&#xff0c;则我…

micropython esp8266教程_(一)ESP8266/nodemcu如何使用MicroPython进行开发

简介 大家都知道ESP8266&#xff08;nodemcu&#xff09;可以使用arduino的语法&#xff08;C&#xff09;进行开发&#xff0c;也有些小伙伴可能也知道可以使用lua语言进行开发的。但是现在我们也可以使用python来开发esp8266&#xff08;nodemcu&#xff09;了。那么这篇教程…

PostGIS之路——几何对象编辑(二)

1、ST_Reverse返回几何对象顶点顺序相反的几何对象。geometry ST_Reverse(geometry g1);示例SQL&#xff1a;SELECT ST_AsText(the_geom) as line, ST_AsText(ST_Reverse(the_geom)) As reverselineFROM(SELECT ST_MakeLine(ST_MakePoint(1,2),ST_MakePoint(1,10)) As the_geom…

C++ cin.sync()和cin.ignore()

cin.sync()的功能是清空缓冲区&#xff0c;而cin.ignore()虽然也是删除缓冲区中数据的作用&#xff0c;但其对缓冲区中的删除数据控制的较精确。 有时候你只想取缓冲区的一部分&#xff0c;而舍弃另一部分&#xff0c;这是就可以使用cin.ignore()&#xff0c;其使用方法是&…

Spring Data对Cassandra 3的支持

名为Ingalls的新Spring Data发布火车的发布引起了我的关注&#xff0c;其中之一是Spring Data Cassandra最终支持Cassandra 3。 因此&#xff0c;我回顾了我的一个旧样本&#xff0c;并尝试了较新版本的Cassandra。 安装Cassandra 第一步是安装本地版本的Cassandra&#xff0c…

第12秒做视频封面:阿里云视频截帧功能

代码&#xff1a; <video src"http://ruilai-course.imreliable.net/fangcao_course/{{results.VideoName}}.mp4"poster"http://ruilai-course.imreliable.net/fangcao_course/{{results.VideoName}}.mp4?x-oss-processvideo/snapshot,t_12000,f_jpg,w_750,…

winform什么时候会调用closed事件_async/await 给程序带来了什么?

如果说async给ASP.NET带来的是处理能力的提高&#xff0c;那么在WinForm中给程序员带来的好处则是最大的。我们再也不用因为要实现异步写回调或者绑定事件了&#xff0c;省事了&#xff0c;可读性也提高了。不信你看下面我们将调用我们那个web service的代码在.NET4.5下实现一下…

Vtk出现Generic Warning时

Generic Warning: In D:\ProgramFiles\VTK\VTK-7.0.0\Rendering\Core\vtkPolyDataMapper.cxx, line 28 Error: no override found for ‘vtkPolyDataMapper’. Warning: In D:\ProgramFiles\VTK\VTK-7.0.0\Rendering\Core\vtkInteractorStyleSwitchBase.cxx, line 43 vtkInte…

Properties 持久的属性集

特点&#xff1a;1、Hashtable的子类&#xff0c;map集合中的方法都可以用。2、该集合没有泛型。键值都是字符串。3、它是一个可以持久化的属性集。键值可以存储到集合中&#xff0c;也可以存储到持久化的设备(硬盘、U盘、光盘)上。键值的来源也可以是持久化的设备。 // 根据ke…