我需要实现256位AES加密,但我在网上找到的所有示例都使用"KeyGenerator"生成256位密钥,但我想使用自己的密码.如何创建自己的密钥?我已经尝试将其填充为256位,但后来我得到一个错误,说密钥太长了.我确实安装了无限管辖区补丁,所以那不是问题:)
IE浏览器.KeyGenerator看起来像这样......
// Get the KeyGenerator
KeyGenerator kgen = KeyGenerator.getInstance("AES");
kgen.init(128); // 192 and 256 bits may not be available
// Generate the secret key specs.
SecretKey skey = kgen.generateKey();
byte[] raw = skey.getEncoded();
Run Code Online (Sandbox Code Playgroud)
编辑
我实际上是将密码填充到256个字节,而不是位,这太长了.以下是我现在使用的一些代码,我对此有更多的经验.
byte[] key = null; // TODO
byte[] input = null; // TODO
byte[] output = null;
SecretKeySpec keySpec = null;
keySpec = new SecretKeySpec(key, "AES");
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS7Padding");
cipher.init(Cipher.ENCRYPT_MODE, keySpec);
output = cipher.doFinal(input)
Run Code Online (Sandbox Code Playgroud)
您需要自己做的"TODO"位:-)
我一直在浏览Sun网站上的javadoc文档,试图找出是否有一个javadoc标签可用于记录类或方法的泛型类型签名.
@typeparam
类似于通常的东西@param
,但适用于类型和方法,例如
/**
* @typeparam T This describes my type parameter
*/
class MyClass<T> {
}
Run Code Online (Sandbox Code Playgroud)
我怀疑没有这样的标签 - 我在任何地方都找不到它,并且JavaSE API文档没有显示任何迹象,但它似乎是一个奇怪的遗漏.有人能把我说得对吗?
我正在添加到我们的大型Java应用程序的模块必须与另一家公司的SSL安全网站进行交谈.问题是该站点使用自签名证书.我有一份证书副本,以验证我没有遇到中间人攻击,我需要将此证书合并到我们的代码中,以便与服务器的连接成功.
这是基本代码:
void sendRequest(String dataPacket) {
String urlStr = "https://host.example.com/";
URL url = new URL(urlStr);
HttpURLConnection conn = (HttpURLConnection)url.openConnection();
conn.setMethod("POST");
conn.setRequestProperty("Content-Length", data.length());
conn.setDoOutput(true);
OutputStreamWriter o = new OutputStreamWriter(conn.getOutputStream());
o.write(data);
o.flush();
}
Run Code Online (Sandbox Code Playgroud)
在没有为自签名证书进行任何额外处理的情况下,这会在conn.getOutputStream()处死,但有以下异常:
Exception in thread "main" javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
....
Caused by: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
....
Caused by: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path …
Run Code Online (Sandbox Code Playgroud) 如果你使用过Oracle,你可能会收到有用的消息"ORA-00942:表或视图不存在".是否有合法的技术原因消息不包含丢失对象的名称?
关于这一点的争论是由于安全听起来像是由TSA制作的.如果我是攻击者,我会知道我刚试图利用哪个表,并且能够轻松地解释这个无用的消息.如果我是通过多层应用程序代码处理复杂连接的开发人员,那么通常很难说.
我的猜测是,当最初实现此错误时,有人忽略了添加对象名称,现在,人们担心它会破坏兼容性来修复它.(代码执行愚蠢的事情,如解析错误消息,如果它发生变化将会混淆.)
是否有开发人员友好(而不是招募您的DBA)方式来确定丢失表的名称?
虽然我已经接受了与该主题相关的答案,但它并没有真正回答我的问题:为什么这个名称不是错误信息的一部分?如果有人能提出真正的答案,我会很乐意改变我的投票.
从Java 6 Pattern文档:
特殊构造(非捕获)
(?:
X)
X,作为非捕获组...
(?>
X)
X,作为一个独立的非捕获组
之间(?:X)
和有(?>X)
什么区别?在这种情况下,独立意味着什么?
根据java api,InputStream.read()
描述为:
如果由于到达流末尾而没有可用字节,则返回值-1.此方法将阻塞,直到输入数据可用,检测到流的末尾或抛出异常.
我有一个while(true)
循环执行读取,当通过流发送任何内容时,我总是得到-1.这是预期的.
我的问题是什么时候会读取()阻止?因为如果它没有获得任何数据,则返回-1.我希望阻塞读取等到收到数据.如果你已经到达输入流的末尾,不应该读取()只是等待数据而不是返回-1?
或者read()只阻止是否有另一个线程访问流并且你的read()无法访问流?
这引出了我的下一个问题.我曾经有过事件监听器(由我的库提供),当数据可用时会通知我.当我收到通知时,我会调用while((aByte = read()) > -1)
存储字节.当我在非常接近的时间内收到两个事件并且我的所有数据都没有被显示时,我感到很困惑.似乎只显示第二个事件数据的尾端,其余部分丢失了.
我最终改变了我的代码,以便当我得到一个事件时,我会调用if(inputStream.available() > 0) while((aByte = read()) > -1)
存储字节.现在它正常工作,我的所有数据都显示出来了.
有人可以解释这种行为吗?该InputStream.available()
是说要回,你可以阻止下一个调用方之前读取的字节数(流?).即使我不使用.available(),我希望第一个事件的读取只是阻止第二个事件的读取,但不会擦除或消耗过多的流数据.为什么这样做会导致我的所有数据都不显示?
是否有可能在运行时以编程方式检查持有给定对象锁的Thread的名称?
为什么这个测试程序导致了java.lang.IllegalMonitorStateException
?
public class test {
static Integer foo = new Integer(1);
public static void main(String[] args) {
synchronized(foo) {
foo++;
foo.notifyAll();
}
System.err.println("Success");
}
}
Run Code Online (Sandbox Code Playgroud)
结果:
Exception in thread "main" java.lang.IllegalMonitorStateException
at java.lang.Object.notifyAll(Native Method)
at test.main(test.java:6)
Run Code Online (Sandbox Code Playgroud) 这个网站上有多少程序员使用GIS?
你使用什么中间件?ESRI?MapGuide的?谷歌?
你在做什么样的项目?您是专注于Web工作,制作桌面应用程序还是Intranet项目?你在哪个行业工作?
java ×7
aes ×1
blocking ×1
cmd ×1
concurrency ×1
cryptography ×1
database ×1
encryption ×1
esri ×1
gis ×1
google-maps ×1
inputstream ×1
java-io ×1
javadoc ×1
jsse ×1
keystore ×1
notify ×1
ora-00942 ×1
oracle ×1
osgeo ×1
passwords ×1
regex ×1
rxtx ×1
sql ×1
ssl ×1
survey ×1
truststore ×1