小编Lon*_*zak的帖子

Java keytool /使用java生成密钥的安全性(一般)

我们使用与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的一些问题.

java security random encryption keytool

5
推荐指数
2
解决办法
3833
查看次数

性能iText vs.PdfBox

我正在尝试将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?你能解释一下策略如何影响绩效吗?

java performance itext pdfbox

5
推荐指数
1
解决办法
2万
查看次数

如何使用ESAPI修复HTTP响应分裂漏洞

在最近的一个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 (ok)

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 security servlets httprequest esapi

4
推荐指数
1
解决办法
2万
查看次数

如何使用 Apache PDFBox 从 PDF 中的按钮图标中提取图像?

我想使用 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)

java pdf pdfbox

4
推荐指数
1
解决办法
1458
查看次数

java.lang.IllegalStateException:有一个打开的流编写器时无法读取

我正在写一个简单的硒测试,我需要截取网页截图并将其保存为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 pdfbox

4
推荐指数
1
解决办法
4803
查看次数

正则表达式查找代码中的空注释

我正在寻找一个正则表达式,它只能找到空的java注释,如下所示:

/**
 * 
 */
Run Code Online (Sandbox Code Playgroud)

Eclipse 在例如生成序列版本 ID 时创建这些...还有另一个关于查找所有注释的线程,但是我没有设法调整正则表达式以仅“过滤”出空注释。

//.*|("(?:\\[^"]|\\"|.)*?")|(?s)/\*.*?\*/
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?谢谢!

java regex search comments

3
推荐指数
1
解决办法
382
查看次数

我正在尝试理解内容安全策略框架祖先标签

我正在尝试在 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"

这是弹出的错误,在此处输入图像描述

security content-security-policy ionic-framework ionic3

3
推荐指数
1
解决办法
1344
查看次数

Powermock imageio UnsatisfiedLinkError

在我的当前项目(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:扩展课程

  1. 要测试的类

    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)

java easymock powermock javax.imageio

2
推荐指数
1
解决办法
1587
查看次数

Easymock:matcher调用是在预期之外使用的

我将代码中方法的返回值更改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)

有任何想法吗?

java junit unit-testing easymock

1
推荐指数
1
解决办法
9599
查看次数

带有 mtom 附件的 SOAP 请求:在 [attachment] 中找不到 id &lt;id&gt; 的附件

我尝试使用 SoapUI (5.3.0) 连接到 SOAP Web 服务。此外,还应发送一个 mtom 附件。但似乎发送附件存在一些问题 - 我总是收到以下错误消息作为响应:

someID在 [NameOfTheAttachmentFile.txt] 中找不到id 的附件

这是我所做的:

  1. 启用请求属性“启用 MTOM”
  2. 添加了附件(在附件部分)
  3. 添加了一些 cid:12345
  4. 在附件的“部分”列中选择该 cid

这是请求的一部分:

<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 的原始视图中看到的那样,文档与请求一起发送......任何想法是什么导致了问题?

mtom soapui

1
推荐指数
1
解决办法
2617
查看次数

PDF 未显示在 WebView 中

我有一个应用程序,我想在其中在 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”

android android-webview firebase

1
推荐指数
1
解决办法
6310
查看次数

RandomAccessBuffer的性能改进

我使用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 algorithm optimization performance profiling

0
推荐指数
1
解决办法
82
查看次数