问题列表 - 第27936页

多平台加密java移动存储系统的思路

嗨我有一些关于在Android,Blackberry和J2ME上实现加密存储(加密文件系统类型)的问题(请阅读Doubts部分).密码学硕士,需要你的建议.

我知道这个问题有点长,可能太冗长了,但是请尝试阅读它直到最后(我有很多相关的问题,我不能在几个帖子中将它们分开).如果您能就我的至少一个问题(怀疑部分)给我一些反馈,我将非常感激.

谢谢,

 

 

目的


我目前正在为多平台存储系统设计API,该系统将提供与以下支持的移动Java平台相同的接口和功能:

  • J2ME.最低配置/配置文件CLDC 1.1/MIDP 2.0,支持一些必要的JSR(用于文件存储的JSR-75).
  • Android.尚未确定最低平台版本,但很可能是API级别7.
  • 黑莓.它将使用相同的J2ME基础源,但利用该平台的一些先进功能.尚未确定最低配置(可能为4.6,因为4.5上的RMS限制为64 KB).

基本上API会运行三种商店:

  • 档案.这些将允许标准目录/文件操作(通过流,create,mkdir等读/写).
  • 偏好.它是一个特殊的商店,处理通过键访问的属性(类似于普通的旧java属性文件,但支持一些改进,如不同的值数据类型,如Android平台上的SharedPreferences)
  • 本地消息队列.该商店将提供基本的消息队列功能.

注意事项


受JSR-75启发,所有类型的商店都将通过符合RFC 1738惯例的URL以统一的方式访问,但具有自定义前缀(即"file://"表示文件,"prefs://"表示对于消息队列,首选项或"queue://").该地址将指的是每个移动平台实现将映射到物理存储对象的虚拟位置.只有文件才允许分层存储(文件夹)和访问外部存储卡(通过单元名称,与JSR-75相同,但不管底层平台如何都不会改变).其他类型只支持平面存储.

系统还应支持所有基本类型安全版本.用户通过在URL上加"s"前缀来表示它(即"sfile://"而不是"file://").API 只需要一个PIN(仅引入一次)来访问任何类型的安全对象类型.

实施问题


为了实现明文和加密存储,我将使用底层平台上可用的功能:

  • 档案.这些可在所有平台上使用(J2ME仅适用于JSR-75,但它对我们的需求是强制性的).除了解决问题之外,抽象文件到实际文件映射是直接的.
  • RMS.在J2ME(和Blackberry)平台上可用的这种类型的存储对于Preferences和Message Queues来说很方便(虽然取决于性能或大小要求,这些可以通过普通文件实现).
  • SharedPreferences.此类存储仅在Android上可用,将与首选项需求相匹配.
  • SQLite数据库.这可以用于Android(也许是Blackberry)上的消息队列.

在加密方面,应满足一些要求:

  • 为了简化实现,它将基于流(用于文件),RMS记录,SharedPreferences键值对,SQLite数据库列在读/写操作的基础上执行.每个底层存储对象都应使用相同的加密密钥.
  • 加密商店的处理应与未加密的商店相同.访问加密存储的唯一区别(从用户的角度来看)是寻址.
  • 用户PIN提供对任何安全存储对象的访问,但是更改它不需要解密/重新加密所有加密数据.
  • 应尽可能使用底层平台的加密功能,因此我们将使用:
    • J2ME:SATSA-CRYPTO(如果可用)(非强制)或轻量级的BoncyCastle加密框架(适用于J2ME).
    • Blackberry:RIM Cryptographic API或BouncyCastle
    • Android:JCE与集成加密提供程序(BouncyCastle?)

我怀疑.求助于此


达到这一点后,考虑到平台的局限性,我对于哪种解决方案更方便感到震惊.这些是我的一些疑问:

  • 数据加密算法.AES-128能够坚固且足够快吗?您会建议使用哪种替代方案?
  • 加密模式.我已经读过ECB加密与CBC的弱点,但在这种情况下,第一个将具有随机访问块的优势,这对于文件的搜索功能很有意义.您会选择什么类型的加密模式?流加密适合这种情况吗?
  • 密钥生成.可以为每个存储对象(文件,RMS RecordStore等)生成一个密钥,或者只为同一类型的所有对象使用一个密钥.第一个似乎"更安全",虽然它需要一些额外的设备空间.在您看来,每个人的权衡取舍是什么?
  • 密钥存储.对于这种情况,使用标准JKS(或PKCS#12)KeyStore文件可能适合存储加密密钥,但我也可以定义一个较小的结构(加密转换/密钥数据/校验和),可以附加到每个存储库(即使用具有相同名称和特殊扩展名的附加文件用于普通文件或嵌入其他类型的对象(如RMS记录存储)中.你更喜欢什么方法?当使用具有多密钥生成的标准KeyStore时(假设这是您的偏好),使用每个存储对象的记录存储或仅保留所有密钥的全局KeyStore(即使用URL标识符)会更好吗?抽象存储对象作为别名)?
  • 万能钥匙.使用主密钥似乎很明显.此密钥应受用户PIN(仅引入一次)的保护,并允许访问其余的加密密钥(它们将通过此主密钥加密).更改PIN只需要重新加密此密钥而不是所有加密数据.您会在哪里考虑到如果丢失了所有数据将无法进一步访问?我应该考虑哪些进一步的考虑因素?
  • 平台加密支持 …

java encryption android blackberry file

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

有没有办法在不重新启动Emacs的情况下对我的.emacs文件中的切换进行更改?

我希望能够对我的.emacs文件进行更改,而无需重新加载Emacs.

我发现了三个问题,它们回答了我的问题(你可以在这里,这里这里找到它们),但问题是我刚刚做出的改变是切换,并作为对两个答案的评论(a1,a2)对于那些问题的解释,那里给出的解决方案(例如Mx reload-file或Mx eval-buffer)不适用于切换.

我想有一种方法可以使用命令再次切换变量,但如果有办法重新加载整个.emacs并重新评估所有切换而不必指定它们,我宁愿.

在任何情况下,如果有人告诉我如何切换变量的值,我也会感激,如果我只是改变了一个切换,我可以用命令来做,而不是为此重新启动Emacs(我是Emacs的新手) ).我不知道这些信息是多么有用,但我应用了变化如下(这是我从拿到这个回答另一个问题):

(setq skeleton-pair t)  
(setq skeleton-pair-on-word t)  
(global-set-key (kbd "[") 'skeleton-pair-insert-maybe)  
(global-set-key (kbd "(") 'skeleton-pair-insert-maybe)  
(global-set-key (kbd "{") 'skeleton-pair-insert-maybe)   
(global-set-key (kbd "<") 'skeleton-pair-insert-maybe)  
Run Code Online (Sandbox Code Playgroud)

编辑:我在.emacs中包含了上面的内容并重新加载了Emacs,以便更改生效.然后我评论了所有这些并尝试了Mx加载文件.这不起作用.下面的建议(如果我使用它来首次评估切换,但是当我想要撤消它时,PP的 Cx Ce可以工作).如果这样的事情存在的话,我想要评估评论的东西......

谢谢 :)

emacs loading dot-emacs toggle

9
推荐指数
2
解决办法
573
查看次数

无法写入文本文件

我正在运行一些测试,需要写入文件.当我运行测试时,open = (file, 'r+')不会写入文件.测试脚本如下:

class GetDetailsIP(TestGet):

    def runTest(self):

        self.category = ['PTZ']

        try:
            # This run's and return's a value
            result = self.client.service.Get(self.category) 

            mylogfile = open("test.txt", "r+")
            print >>mylogfile, result
            result = ("".join(mylogfile.readlines()[2]))
            result = str(result.split(':')[1].lstrip("//").split("/")[0])
            mylogfile.close()
        except suds.WebFault, e:                        
            assert False
        except Exception, e:
            pass
        finally:
            if 'result' in locals():
                self.assertEquals(result, self.camera_ip)
            else:
                assert False
Run Code Online (Sandbox Code Playgroud)

当此测试运行时,没有任何值输入到文本文件中,并且在变量结果中返回一个值.

我也试过了mylogfile.write(result).如果该文件不存在则声明该文件不存在且不创建该文件.

这可能是一个权限问题,其中不允许python创建文件?我确保此文件的所有其他读取都已关闭,因此我不应该锁定该文件.

任何人都可以提出任何建议,为什么会这样?

谢谢

python file-io

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

为什么在重新扫描期间不会替换参数替换?

请考虑以下宏定义和调用:

#define x x[0]
#define y(arg) arg

y(x)
Run Code Online (Sandbox Code Playgroud)

此调用扩展为x[0](在Visual C++ 2010,g ++ 4.1,mcpp 2.7.2和Wave上测试).

为什么? 具体来说,为什么不扩展到x[0][0]

在宏替换期间,

在扩展了包含在其中的所有宏之后,替换列表中的参数...被相应的参数替换.在被替换之前,每个参数的预处理标记都被完全宏替换(C++03§16.3.1/ 1).

评估宏调用,我们采取以下步骤:

  • y调用类函数宏x作为其arg参数的参数
  • x在参数是宏观替换成为x[0]
  • arg在替换列表由参数的宏代替值代替,x[0]

替换所有参数后的替换列表是x[0].

替换替换列表中的所有参数后,重新扫描生成的预处理标记序列...以替换更多的宏名称(C++03§16.3.4/ 1).

如果在替换列表的扫描期间找到要替换的宏的名称...则不会替换它.此外,如果任何嵌套替换遇到要替换的宏的名称,则不替换它(C++03§16.3.4/ 2).

x[0]重新扫描替换列表(请注意,要替换的宏的名称y):

  • x 被标识为类似对象的宏调用
  • x 被替换为 x[0]

由于§16.3.4/ 2中的规则阻止了递归,因此此时替换停止.重新扫描后的替换列表是x[0][0].

我清楚地误解了一些东西,因为我测试的所有预处理器都说我错了.此外,这个例子是C++ 0x FCD(§16.3.5/ 5)中的一个更大的例子,它也表示预期的替换是x[0].

x在重新扫描期间为什么不更换?

C99和C++ 0x实际上与引用部分中的C++ 03具有相同的措辞.

c++ c-preprocessor

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

HQL按日期进行查询搜索(Java + NetBeans)

大家好我有以下问题.我的MySQL数据库中有一个保留表,日期列定义为DATETIME.我需要使用hibernate进行查询,以便在一天内查找所有储备,无论是一小时,只是在同一年的月份和日期,我正在这样做

public List<Reserve> bringAllResByDate(Date date){

em = emf.createEntityManager();
Query q = em.createQuery("SELECT r FROM Reserve r WHERE r.date=:date ");
q.setParameter("date", date);
Run Code Online (Sandbox Code Playgroud)

...

我真的不知道怎么做它比较,并带给我那些从指定的日期,任何帮助?

java mysql hibernate hql date

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

重复css背景图像一定次数

有没有办法设置背景图像与css重复的次数?

css repeat

24
推荐指数
2
解决办法
3万
查看次数

在没有本地化$ @一个bug的情况下,在CPAN模块中进行"eval"吗?

我想我在Params :: Validate中遇到过一个错误,但我不确定我是否正确识别出有问题的代码.有问题的代码无法通过链传递异常(使用Try :: Tiny),所以我开始调试并发现try块内使用的类有一个析构函数.这个析构函数调用使用Params::Validate和查看Validate.pm 源代码的对象方法,我看到eval没有$@本地化,即全局$@被覆盖.

现在我看到两个选项:

  1. Params::Validate应始终本地化$@,因此这是一个应报告的错误.
  2. 错误是在有问题的类中,因为它不应该Params::Validate在析构函数中使用.Params::Validate可以保持现状.

哪一个?我该如何处理这种情况?

PS:我认为CPAN模块应该坚如磐石,既不会破坏自己也不会破坏环境,因此问题标题.

perl eval exception

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

这些代码有什么区别?

<input type='text' id='txt' name='txtName' size='20' value='testing'/>

<script type="text/javascript" language='javascript'>
  var val = document.getElementsByName('txtName');
  alert(val[0].value);
  alert(window.txtName.value);
</script>
Run Code Online (Sandbox Code Playgroud)

在上面的代码我们正在使用

alert(val[0].value);

alert(window.txtName.value);
Run Code Online (Sandbox Code Playgroud)

这两种从对象中获取价值的方法.两种方式之间有什么区别,哪种方式最好.

javascript

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

NSURLConnection,NSURLRequest,不受信任的证书和用户身份验证

大家早上好,

我一直在尝试编写一个从需要身份验证的远程Web服务执行某些GET的应用程序.我的主要问题是这些远程服务器中的大多数(并且有很多远程服务器)没有有效的证书.我有代码接受无效的证书和代码,以正确的uname&pass(下面)来响应挑战.我遇到的问题是让两人一起玩.我似乎无法找到一种方法来发送挑战NSURLCredential或正确链接回调的方法.当我试图将它们连接起来时,我无法NSURLRequest接到didReceiveAuthenticationChallenge两次电话.

任何想法将不胜感激!

认证代码......

-(void)connection:(NSURLConnection *)connection didReceiveAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge
{   
    if(!hasCanceled){
        if ([challenge previousFailureCount] == 0) {
            NSURLCredential *newCredential;
            newCredential=[NSURLCredential credentialWithUser:_username password:_password persistence:NSURLCredentialPersistenceNone];
            [[challenge sender] useCredential:newCredential forAuthenticationChallenge:challenge];
        } 
        else {
            [[challenge sender] cancelAuthenticationChallenge:challenge];
            NSLog(@"Bad Username Or Password");
            badUsernameAndPassword = YES;
            finished = YES;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

iphone cocoa nsurlconnection nsurlrequest nsurlcredential

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

我想在Mac OS/Windows上的System Startup上运行我的Java程序.我怎样才能做到这一点?

这就是我想出的.它有效,但我想知道是否有更优雅的东西.谢谢!

米莎

/* Copyright (c) 2010 Misha Koshelev. All Rights Reserved.
 *
 * TODO:
 * - Add Linux support
 */
package com.mksoft.common;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileWriter;
import java.io.InputStreamReader;
import java.io.IOException;
import java.io.PrintWriter;

import java.net.URI;
import java.net.URISyntaxException;

/**
 * Run specified class within this JAR file on system startup.
 *
 * @author Misha Koshelev
 */
public class RunOnSystemStartup {    
    /*
     * Constants
     */
    protected final static String osName=System.getProperty("os.name");
    protected final static String fileSeparator=System.getProperty("file.separator");
    protected final static String javaHome=System.getProperty("java.home");
    protected …
Run Code Online (Sandbox Code Playgroud)

java windows macos startup

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