我们使用与java安装捆绑在一起的keytool来生成用于执行非对称RSA加密的密钥.根据最近发生的事件,有人问我在java keytool的引擎下发生了什么.特别是关于结果数字的随机性.(例如"为什么没有任何随机用户输入像鼠标移动或键盘输入?"
那么创建密钥的java keytool的"随机源"是什么?
我自己做了一个快速的研究,但我发现的唯一信息是2000 年的帖子:
- keytool.exe使用SecureRandom作为其随机数的基础.
- SecureRandom的Sun提供商遵循IEEE P1363标准,
- Sun SecureRandom提供商遵守NIST的FIPS PUB 140-1第4.11节.
- SecureRandom的Sun提供程序将其他熵源与线程争用进程的结果混合在一起.其中包括当前时间,VM内存使用状态,系统属性和文件系统活动.
- 在没有JIT的情况下,该算法可能表现不佳,因此我们正在考虑提供替代供应商,该供应商将利用对熵收集设备(例如/ dev/random或Pentium III热噪声RNG)的平台特定支持.
但是这已经回到了2K,所以你们中的某些人可能会对此有所了解并提供上述更新(在Java7中有所不同吗?).根据你的回答,如果你建议改用另一个像bouncycastle这样的提供商,我会被强调...
更新:我现在假设keytool使用java.security.SecureRandom(因此是默认提供程序)作为其随机数的基础.我发现了另一篇有趣的文章,它指出了控制SecureRandom API JAVA_HOME/lib/security/java.security配置的文件.
在那里它陈述如下:
选择SecureRandom的种子数据源.默认情况下,尝试使用securerandom.source属性指定的熵收集设备.如果在访问URL时发生异常,则使用传统的系统/线程活动算法.在Solaris和Linux系统上,如果指定了file:/ dev/urandom并且它存在,则默认情况下会激活特殊的SecureRandom实现.这个"NativePRNG"直接从/ dev/urandom读取随机字节.在Windows系统上,URL文件:/ dev/random和file:/ dev/urandom允许使用Microsoft CryptoAPI种子功能.
securerandom.source =文件是:/ dev/urandom的
由于我们在Windows系统上,我假设使用了Microsoft CryptoAPI.自从使用Win7以来,它就是CNG(CryptoAPI Next Generation).有没有人知道什么是'使用Microsoft CryptoAPI种子功能'.手段?最可能的方法似乎是:CryptGenRandom function
更新:Oracle似乎改进了Java 8的一些问题.
我正在尝试将pdf(我最喜欢的书籍Effective Java,如果它的问题)转换为文本,我检查了iText和Apache PdfBox.我发现性能有很大的不同:使用iText需要2:521,使用PdfBox:6:117.如果我的代码为PdfBOx
PDFTextStripper stripper = new PDFTextStripper();
BUFFER.append(stripper.getText(PDDocument.load(pdf)));
Run Code Online (Sandbox Code Playgroud)
这是针对iText的
PdfReader reader = new PdfReader(pdf);
for (int i = 1; i <= reader.getNumberOfPages(); i++) {
BUFFER.append(PdfTextExtractor.getTextFromPage(reader, i));
}
Run Code Online (Sandbox Code Playgroud)
我的问题是性能取决于什么,有没有办法让PdfBox更快?或者只使用iText?你能解释一下策略如何影响绩效吗?
在最近的一个findbugs(FB)运行后,它抱怨:安全性 - HTTP响应分裂漏洞以下代码触发它:
String referrer = req.getParameter("referrer");
if (referrer != null) {
launchURL += "&referrer="+(referrer);
}
resp.sendRedirect(launchURL);
Run Code Online (Sandbox Code Playgroud)
基本上'referrer'http参数包含一个url,当点击我们的应用程序中的后退按钮时,浏览器返回到该url.它作为参数附加到url.经过一番研究后,我知道我需要清理引荐来源网址.经过一番研究后,我发现esapi项目似乎提供了这种功能:
//1st canonicalize
import org.owasp.esapi.Encoder;
import org.owasp.esapi.Validator;
import org.owasp.esapi.reference.DefaultEncoder;
import org.owasp.esapi.reference.DefaultValidator;
[...]
Encoder encoder = new DefaultEncoder(new ArrayList<String>());
String cReferrer = encoder.canonicalize(referrer);
Run Code Online (Sandbox Code Playgroud)
但是我没有弄清楚如何检测例如jscript代码或其他不属于引用URL的东西.那么如何用esapi实现这一目标呢?
我试过了:
Validator validator = new DefaultValidator(encoder);
validator.isValidInput("Redirect URL",referrer,"HTTPParameterValue",512,false);
Run Code Online (Sandbox Code Playgroud)
但这不起作用.我需要的是一个导致以下结果的函数:
http://www.google.com/login?dest=http://google.com/%0D%0ALocation:javascript:%0D%0A%0D%0Aalert(document.cookie)(不行)
或者是否足以称之为以下声明?
encoder.encodeForHTMLAttribute(referrer);
Run Code Online (Sandbox Code Playgroud)
任何帮助赞赏.
我想使用 java netbeans 从 pdf 中的按钮获取图像图标,并将其放在某个面板中。然而,我在这里撞到了一块砖。我使用 PDFBox 作为我的 PDF 导出器,但我似乎不太理解。我已经成功地从表单字段中读取,但是只要我尝试在 PDFBox 中找到它,就没有按钮提取器。我应该怎么做?是否可以使用这种方法,或者是否有其他方法。提前致谢。
编辑:我已经发现使用示例实用程序中的图像提取图像使用此代码:
File myFile = new File(filename);
try {
//PDDocument pdDoc = PDDocument.loadNonSeq( myFile, null );
PDDocument pdDoc = null;
pdDoc = PDDocument.load( myFile );
PDDocumentCatalog pdCatalog = pdDoc.getDocumentCatalog();
PDAcroForm pdAcroForm = pdCatalog.getAcroForm();
// dipakai untuk membaca isi file
List pages = pdDoc.getDocumentCatalog().getAllPages();
Iterator iter = pages.iterator();
while( iter.hasNext() )
{
PDPage page = (PDPage)iter.next();
PDResources resources = page.getResources();
Map images = resources.getImages();
if( images != null )
{ …Run Code Online (Sandbox Code Playgroud) 我正在写一个简单的硒测试,我需要截取网页截图并将其保存为PDF.我正在使用带有Selenium的TestNG和PDFbox库
以下是我的测试方法:
package com.helper;
import java.io.File;
import java.io.IOException;
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.pdmodel.PDPage;
import org.apache.pdfbox.pdmodel.PDPageContentStream;
import org.apache.pdfbox.pdmodel.graphics.image.PDImageXObject;
import org.openqa.selenium.OutputType;
import org.openqa.selenium.TakesScreenshot;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebDriverException;
import org.testng.annotations.Test;
public class ScreenshotPDF {
@Test
public void screenshotPDF(){
WebDriver driver= DriverManager.getWebdriver("chrome");
driver.get("https://www.google.co.in");
try {
File screenshot = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE);
PDDocument document = new PDDocument();
PDPage page = new PDPage();
document.addPage(page);
PDImageXObject pdi = PDImageXObject.createFromFileByContent(screenshot ,document);
PDPageContentStream contentStream = new PDPageContentStream(document, page);
contentStream.drawImage(pdi,100,100);
document.save("C:/Users/123456/Documents/sample.pdf");
contentStream.close();
document.close();
} catch (WebDriverException e) {
e.printStackTrace();
} catch (IOException e) …Run Code Online (Sandbox Code Playgroud) 我正在寻找一个正则表达式,它只能找到空的java注释,如下所示:
/**
*
*/
Run Code Online (Sandbox Code Playgroud)
Eclipse 在例如生成序列版本 ID 时创建这些...还有另一个关于查找所有注释的线程,但是我没有设法调整正则表达式以仅“过滤”出空注释。
//.*|("(?:\\[^"]|\\"|.)*?")|(?s)/\*.*?\*/
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?谢谢!
我正在尝试在 IONIC 应用程序内的 iframe 中显示我的网站之一。我需要限制我的网站被其他网站嵌入框架。我决定使用内容安全策略响应标头,其中
Content-security-policy: frame-ancestors ${website-to-be-allowed}
确保只有提到的网站可以 iframe 我的网站,但是我也需要我的 ionic 应用程序来 iframe 我的网站,并且由于 Ionic 应用程序用作文件系统,我可以将所有文件系统的访问权限授予 iframe 我的网站。当我添加
Content-security-policy: frame-ancestors ${website-to-be-allowed} filesystem
如此处所述, https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy/frame-ancestors
我在 Android 和 IOS 应用程序上进行了测试,并且都抛出了相同的错误,内容如下:
Refused to display ${website} in a frame because an ancestor violates the following content security policy directive: "frame-ancestors filesystem"
这是弹出的错误,在此处输入图像描述
在我的当前项目(jdk 1.6.0)中添加了powermock(1.5.6与Easymock 3.2的组合)之后,我在测试方法中遇到了一些测试失败,这些测试方法之前完全正常:
java.lang.UnsatisfiedLinkError:com.sun.imageio.plugins.jpeg.JPEGImageReader.initReaderIDs(Ljava/lang/Class; Ljava/lang/Class; Ljava/lang/Class;)V
以下代码失败:
BufferedImage img = null;
try {
img = ImageIO.read(this.getClass().getResourceAsStream("/example.jpg"));
}
catch (IOException e) {
fail(e.getMessage());
}
Run Code Online (Sandbox Code Playgroud)
powermock页面已经有一个2009年的错误,但没有修复,没有解决方法.(回到32Bit是无稽之谈,因为这些方法没有电动摇摆工作)所以有人知道如何解决这个问题吗?
更新I:切换到32位是没有选择,除此之外,这不是问题.如果我不使用PowerMock,每个测试都在64Bit JVM中完美运行......
更新II:这里是请求的信息
更新III:扩展课程
要测试的类
import java.awt.image.BufferedImage;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.security.GeneralSecurityException;
import java.security.cert.X509Certificate;
import javax.imageio.ImageIO;
import sun.security.x509.CertificateIssuerName;
import sun.security.x509.CertificateSubjectName;
import sun.security.x509.X500Name;
import sun.security.x509.X509CertImpl;
import sun.security.x509.X509CertInfo;
public class App {
private X509Certificate certificate = null;
public ByteArrayOutputStream readImage() {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
BufferedImage img = null;
try { …Run Code Online (Sandbox Code Playgroud)我将代码中方法的返回值更改void为和Object.然后两次junit测试失败,说明expect(...).andReturn(...)缺失了.添加后,一个测试是固定的,另一个仍然抛出一个看起来有点奇怪的异常:
java.lang.IllegalStateException:matcher调用在期望之外使用
适用于一个但不适用于另一个的代码是:
expect(myMock.foo(1l,FooEnum.A)).andReturn(EasyMock.anyObject(String.class));
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?
我尝试使用 SoapUI (5.3.0) 连接到 SOAP Web 服务。此外,还应发送一个 mtom 附件。但似乎发送附件存在一些问题 - 我总是收到以下错误消息作为响应:
someID在 [NameOfTheAttachmentFile.txt] 中找不到id 的附件
这是我所做的:
这是请求的一部分:
<ws:stream mimeType="text/plain" uuid="0815" filename="Example.txt" ...>
<ws:documentData>cid:1234</ws:documentData>
</ws:stream>
Run Code Online (Sandbox Code Playgroud)
正如我在 SoapUI 的原始视图中看到的那样,文档与请求一起发送......任何想法是什么导致了问题?
我有一个应用程序,我想在其中在 WebView 中显示 PDF 文件。我试过这样做
webview = (WebView)findViewById(R.id.webview);
progressbar = (ProgressBar) findViewById(R.id.progressbar);
String filename =**"My Firebase PDF Url"**;
webview.loadUrl("https://docs.google.com/gview?embedded=true&url=" + filename);
webview.setWebViewClient(new WebViewClient() {
public void onPageFinished(WebView view, String url) {
progressbar.setVisibility(View.GONE);
}
});
}
Run Code Online (Sandbox Code Playgroud)
但是当我运行该应用程序时,它显示了一个白屏。有人知道出了什么问题吗?我使用来自 firebase 的 PDF 下载 URL 作为“我的 Firebase PDF Url”
我使用pdf库将PDF转换为图像.这个过程需要很多时间,我用一个分析器找到问题的原因,并且一切都降低了(> 60%CPU时间)一种方法.现在我的问题是:
这种方法可以进一步改进吗?
public int read(byte[] b) throws IOException {
if (buf==null) throw new IOException("Data buffer not initialized.");
if (pointer<0 || pointer>=length)
return -1;
int length=this.length-(int)pointer;
if(length>b.length)
length=b.length;
for (int i=0; i<length; i++) {
buf.seek(pointer++);
b[i] = buf.readByte();
}
return length;
}
Run Code Online (Sandbox Code Playgroud) java ×9
pdfbox ×3
security ×3
easymock ×2
performance ×2
algorithm ×1
android ×1
comments ×1
encryption ×1
esapi ×1
firebase ×1
httprequest ×1
ionic3 ×1
itext ×1
junit ×1
keytool ×1
mtom ×1
optimization ×1
pdf ×1
powermock ×1
profiling ×1
random ×1
regex ×1
search ×1
servlets ×1
soapui ×1
unit-testing ×1