小编seh*_*ugg的帖子

升级到1.45时BouncyCastle AES错误

最近从BC 1.34升级到1.45.我用以下方法解码一些以前编码的数据:

    SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");
    Cipher cipher = Cipher.getInstance("AES");
    cipher.init(Cipher.DECRYPT_MODE, skeySpec);
    byte[] decrypted = cipher.doFinal(encrypted);
Run Code Online (Sandbox Code Playgroud)

当使用BC 1.45时,我得到了这个例外:

javax.crypto.BadPaddingException: pad block corrupted
 at org.bouncycastle.jce.provider.JCEBlockCipher.engineDoFinal(JCEBlockCipher.java:715)
 at javax.crypto.Cipher.doFinal(Cipher.java:1090)
Run Code Online (Sandbox Code Playgroud)

编辑:有关此问题的更多信息.我使用以下方法从密码短语生成原始密钥:

    KeyGenerator kgen = KeyGenerator.getInstance("AES", "BC");
    SecureRandom sr = SecureRandom.getInstance("SHA1PRNG", "Crypto");
    sr.setSeed(seed);
    kgen.init(128, sr);
    SecretKey skey = kgen.generateKey();
    byte[] raw = skey.getEncoded();
Run Code Online (Sandbox Code Playgroud)

我发现,这导致BC 1.34和1.45两个不同的值.

它可能也不是BouncyCastle相关的(我在Android 2.3上测试)

java android cryptography bouncycastle

6
推荐指数
2
解决办法
4156
查看次数

用于防止滥用的Servlet过滤器?(DoS,垃圾邮件等)

我正在寻找一个servlet过滤器库,帮助我保护我们的Web服务免受未经授权的使用和DDoS.

我们为我们的Web服务提供了"授权客户",因此理想情况下,过滤器可以帮助检测未经授权或行为不当的客户端,或者使用同一帐户检测多个人.此外,我们需要一种方法来防止各种服务的DoS,因为我们有一个开放帐户策略 - 限制用户的同时连接数等.

我们已经看过Tomcat LockOutFilter等等,但这些都是相当原始的,只能防止一种攻击.

当然,解决方案中有许多特定于应用程序的组件,但我想知道是否有人编写了一个通用解决方案作为起点.

java security servlets denial-of-service servlet-filters

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

Android应用内结算:购买后收到空白数据

我正在尝试实施应用内结算.我已登录到在Market注册的测试帐户,并且我已在代码中更新了我的公钥.我可以购买其中一个测试产品ID.

但是,似乎在PURCHASE_STATE_CHANGED意图中发送了空白签名.日志显示如下:

INFO/BillingReceiver(21437): notifyId: android.test.purchased
WARN/ActivityManager(2513): Duplicate finish request for HistoryRecord{47de4b38 com.android.vending/.billing.InAppBuyPageActivity}
INFO/BillingService(21437): handleCommand() action: com.app.GET_PURCHASE_INFORMATION
DEBUG/BillingService(21437): GetPurchaseInformation
ERROR/BillingService(21437): getPurchaseInformation received RESULT_OK
DEBUG/BillingService(21437): request id: 4241021538346688898
INFO/BillingService(21437): handleCommand() action: com.android.vending.billing.RESPONSE_CODE
DEBUG/BillingService(21437): RequestPurchase: RESULT_OK
INFO/BillingService(21437): handleCommand() action: com.android.vending.billing.PURCHASE_STATE_CHANGED
INFO/Security(21437): signedData: {"nonce":-3927284292945900504,"orders":[{"notificationId":"android.test.purchased","orderId":"transactionId.android.test.purchased","packageName":"com.app","productId":"android.test.purchased","purchaseTime":1301944310410,"purchaseState":0}]}
INFO/Security(21542): signature: 
INFO/Security(21437): Purchase not verified
INFO/Security(21437): Purchase count = 0
INFO/BillingService(21437): handleCommand() action: com.android.vending.billing.RESPONSE_CODE
DEBUG/BillingService(21437): GetPurchaseInformation: RESULT_OK
Run Code Online (Sandbox Code Playgroud)

"购买未经验证"是由于代码跳过签名验证(因为它是空白的)并且抛弃了产品购买.

任何的想法?我没有在文档中看到签名可能是空白的或原因是什么.

FWIW,这只发生在我的三星Vibrant Galaxy S(2.2.1)上.它在Droid(2.2.2)上工作正常.

编辑:当我得到PURCHASE_STATE_CHANGED意图作为恢复事务操作的结果时,我在日志中得到了这个:

INFO/BillingService(24010): handleCommand() action: com.android.vending.billing.PURCHASE_STATE_CHANGED
ERROR/Security(24010): data is null
Run Code Online (Sandbox Code Playgroud)

这表明根本没有发送签名的有效负载.

编辑:在进一步测试时,似乎这发生在上传的应用程序的版本和安装的应用程序不同时.http://code.google.com/p/marketbilling/issues/detail?id=15

android billing in-app-purchase google-play

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

没有使用MySQL Connector/J的服务器端预处理语句

据我所知,MySQL 5.1支持服务器端预处理语句.因此,以下代码应该准备一次语句,并执行10次:

    Connection conn = ds.getConnection();
    PreparedStatement stmt = conn.prepareStatement("SELECT COUNT(*) FROM users WHERE user_id=?");
    for (int i=0; i<10; i++)
    {
        stmt.setString(1, "FOO"+i);
        ResultSet res = stmt.executeQuery();
        res.close();
    }
    stmt.close();
    conn.close();
Run Code Online (Sandbox Code Playgroud)

我在mysqld日志中看到的是直接执行的查询:

    SELECT @@session.tx_isolation
    SELECT USER()
    SELECT COUNT(*) FROM users WHERE user_id='FOO0'
    SELECT COUNT(*) FROM users WHERE user_id='FOO1'
    SELECT COUNT(*) FROM users WHERE user_id='FOO2'
            ...
Run Code Online (Sandbox Code Playgroud)

我也在协议日志中看到了每次都发送的查询(使用tcpdump).

使用Connector/J 5.1.12和MySQL 5.1.44.JDBC URL中没有有趣的JDBC选项.直接去驾驶员进行这项测试,没有游泳池.

为什么不准备这些陈述?

mysql jdbc prepared-statement mysql-connector

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

优化问题

我太密集了,无法解决以下优化问题:

例如,有一个2D数组,比如符号与时间

A 1114334221111 
B 9952111111111
C 1113439111131
D 1255432245662
Run Code Online (Sandbox Code Playgroud)

还有一个符号列表,例如:

CABDC
Run Code Online (Sandbox Code Playgroud)

您必须按符号的顺序从数组中选择值,但您可以根据需要重复一次符号.您必须为每个符号选择至少一个值,并且您必须完成整个列表.例如,一种可能性是:

  CCCAAAAAABDDC
  1114334221661 = 35
Run Code Online (Sandbox Code Playgroud)

是否有算法选择总和为最大值的符号列表?在第一次脸红时它看起来像某种回溯算法,但这可能会退化到指数时间.

algorithm

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