【问题标题】:Simple Programming Theory Question简单编程理论题
【发布时间】:2011-01-07 13:54:36
【问题描述】:

大家好,有谁知道为什么与编程语言 Java 相比,C++ 编程语言在生物识别安全应用中的使用更广泛?到目前为止,我收集的答案是 1) 虚拟编译器 2) C++ 提供的 OpenCV 库。谁能帮忙解答一下这个问题?

【问题讨论】:

  • 在 VM(例如 JVM)中运行会引入另一个潜在的攻击点。
  • 生物识别安全应用程序是否有实时编程要求?
  • @Anon:嗯?从字面上看,Java 比用 C/C++ 等语言编写的东西更安全。
  • @Longpoke:请您详细说明为什么您认为 Java 更安全?
  • @Void,因为 Java 程序不受缓冲区溢出错误的影响 ;-)

标签: java c++ security biometrics


【解决方案1】:

也许是硬件支持:我编写了一个使用指纹传感器的应用程序。该设备的库支持是 C++,所以我用 C++ 编写了应用程序。现在他们有了 .NET 版本,所以我的下一个应用程序将是 C#。

【讨论】:

    【解决方案2】:

    我不具体了解生物识别应用程序,但总的来说,当安全性很重要时,Java 可能是一个绊脚石。根据安全要求的编写方式,它们可以涵盖必须在 C++ 中手动完成但由 Java 自动完成的事情。这带来了一个问题,因为需要证明 Java 正确(并且及时!)满足要求。证明这些要求在 C++ 代码中得到满足要容易得多,因为满足要求的代码是相关程序的一部分。

    如果安全人员/要求/客户明确表示依赖 Java 来实现某些安全功能是可以接受的,那么这没什么大不了的。对于依赖/信任 Java 来满足安全要求是否合理,我们可以反复讨论,这实际上取决于特定的安全需求。

    【讨论】:

    • 但是依赖 C++ 而不是 Java 有什么不同的特性吗?
    • 我想不出 C++ 会“自动”执行的任何操作,而您必须在 Java 中手动编码。我认为如果存在类似的东西,它将包含在下一个 Java 版本中。 (如模板/泛型/whatever-java-calls-them。)
    • 我认为@SoapTechie 谈论的是安全认证/审计要求,而不是安全本身。
    【解决方案3】:

    我愿意花钱的原因仅仅是硬件的访问 api 是用 c++ 编写的。大多数现代/高级语言都不会轻易与最初通过 C/C++ api 公开的硬件进行通信。

    在一些相关的说明中,Vala 具有现代\高级语言(以及一些)所期望的所有语言特性,但编译为 C 二进制和源代码,并且可以轻松使用任何编写的库C(不确定C++)。看看吧,我用的不多,但是很酷。

    【讨论】:

      【解决方案4】:

      在 C++ 中实现库比 java 提供了很多。一旦编写完成,C++ 库几乎可以在任何平台(包括嵌入式平台)上运行,并且可以通过 SWIG 等工具作为多种其他语言的本地导入使用。 Java 只能在具有足够速度和内存以运行 JVM 的东西上运行,并且只有其他 Java 程序可以将代码作为本机导入包含在内。对于生物识别应用程序,我认为在嵌入式系统上运行将是一个大问题,因为您可以将其构建到一个小型传感器中。

      更圆滑的答案是没有人愿意等待你的垃圾回收周期来发射 friggen 导弹。

      【讨论】:

      • Java 最初的想法是在嵌入式系统上运行,所以 Java 应用程序在 KVM 上运行,只是这个设备是否支持 Java 的问题。尽管 java 代码是在受控环境下执行的,但最终,即使该代码碰巧作为低级机器代码运行,也等于用 C 编写的代码(仅在执行前受控)。小型设备的 JVM 不会像它的 PC 版本那样占用资源..
      【解决方案5】:

      您可以在那里用任何其他语言替换 Java。可能它更多地与 API 和硬件有关。

      此外,Java 更适合 Web 应用程序。它不是桌面应用程序的最佳选择。

      【讨论】:

      • Java 并不适合 Web 应用程序。让客户端将 JVM 带入内存以运行 Web 应用程序是很慢的,因为 JVM 非常重量级——这就是为什么现在很少有人这样做了。 Java 适用于桌面应用程序,尤其是在您使用多平台的情况下。
      • 我说的是 Servlet!这怎么不适合网络应用!?
      • 在我开发 Java 桌面应用程序的银行中,我们有超过 100 台不同设置(CPU、内存、mbo、操作系统..)的计算机,人们在这些计算机上工作没有任何问题。诚然,我们的 java swing 应用程序需要 100MB 的 RAM,因此具有 256MB RAM 的计算机接近满负荷,但即使在它们上也一切正常......
      • 好吧,多年来我只能作为几个基于 Java 的 Web 应用程序的用户发言(包括现在每周的几个),我得出的结论是 Java 完全不适合 Web 应用程序.无论我一直在做什么,基于 Java 的 Web 应用程序至少需要 30-60 秒才能打开(更不用说做任何事情了),这似乎是让 jvm 运行所需的时间。当你有可用的 flash 和 javascript(两者在现实世界中表现得更好)时,这种延迟是完全不合理的。
      【解决方案6】:

      对于某些生物识别应用程序,执行速度至关重要。

      例如,假设您正在为检查点进行面部识别,而 Java 运行算法所需的时间是 C++ 等编译语言的两倍。这意味着如果您使用 Java,则:

      • 检查点线的长度将增加一倍,
      • 您必须向工作人员支付两倍的检查站费用,或者
      • 您的系统在识别人脸方面的表现只有一半

      这些通常都不是可接受的选项,这使得使用 Java 成为非入门者。

      【讨论】:

      • 我认为你的态度是错误的。即时编译代码(如 Java)可以比一次性编译代码 (C++) 运行得更快,因为它正在适应 CPU 和编译 C++ 代码时无法预测的情况。我相信编写良好的 Java 应用程序可以比 C++ 同类应用程序更快地进行人脸识别,因为它在优化方面做得更多。
      • 该声明虽然在一般理论中是正确的,但不适用于 CPU 已知且固定的嵌入式系统。在这些情况下,C++ 可以使用 Profile Guided Optimization:编译、分析、再次编译。这意味着优化完全适合您的 CPU/程序组合,并且在程序烧录到 ROM 之前完成。
      • 我的假设示例基于对计算密集型任务(例如 2-D 和 3-D 图形算法)进行基准测试的经验,其中面部和指纹识别是特例。结果始终是,对于相同的算法,精心编写的 C/C++ 在相同 CPU 上的执行速度比 Java 快。也许最近的 Java 运行时改变了这一点,我会对证明这一点的经验结果非常感兴趣。但在证据面前,任何人的态度或信仰都无关紧要。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-07
      • 2010-09-29
      • 1970-01-01
      • 2012-11-22
      • 2013-08-01
      相关资源
      最近更新 更多