我认为T?只是编译器的简写Nullable<T>.根据MSDN:
语法
T?是简写Nullable<T>,其中T是值类型.这两种形式是可以互换的.
但是,有一点(微不足道)的差异:Visual Studio不允许我在shorthands上调用静态方法:
bool b1 = Nullable<int>.Equals(1, 2); //no error
bool b2 = int?.Equals(1, 2); //syntax error "Invalid expression term 'int'"
Run Code Online (Sandbox Code Playgroud)
为什么?这种限制有什么理由吗?
我有一个.jar带有Java接口的文件MyService,它有一个方法:
boolean printBitmapObject(android.graphics.Bitmap bitmap, byte[] result);
Run Code Online (Sandbox Code Playgroud)
我想.jar在Visual Studio 2015中的Android Xamarin项目中使用C#中的这个文件.我做了以下步骤:
.jar文件放入属性设置为Jars的新项目的目录中.BuildActionInputJar不幸的是,我无法构建我的主项目,因为自动生成的C#代码中存在错误:
public interface IMyService : global::Android.OS.IInterface
{
bool PrintBitmapObject (Bitmap bmp, byte[] result); //"Bitmap" is red underlined
}
Run Code Online (Sandbox Code Playgroud)
与消息"The type or namespace name 'Bitmap' could not be found (are you missing a using directive or an assembly reference?)".
还有一个自动生成的抽象类IMyServiceStub,它也无法识别Bitmap.而且,它不知道一些自动生成BitmapStub:
public abstract class IMyServiceStub : global::Android.OS.Binder, global::Android.OS.IInterface, …Run Code Online (Sandbox Code Playgroud) 我已经使用过智能卡,我熟悉APDU命令(在ISO/IEC 7816和全球平台规范中定义).
现在我想知道是否有办法将APDU命令发送到插入手机的USIM/SIM卡?(安装了Android v4.4.4 kitkat的三星A3.)
我已经在谷歌搜索过,我发现了一些名为SIM Toolkit Application和Seek for Android的相关主题和工具.但我真的不明白这些是什么?这些项目是我必须在手机上安装的两个应用程序吗?或者这两个工具是否已经安装在USIM/SIM卡上并从手机接收命令?
主动命令,APDU命令和AT命令有什么区别?
我应该学习android来开发SIM卡应用程序还是我只需要Java Card规范和ETSI标准?
提前致谢.
有不同的智能卡支持ISO 14443-4.例如,Mifare Plus及其本机命令集.或其他具有不同命令集的卡(即7816-4 APDU).
我为读卡器开发了一些软件,我需要确定卡支持哪些命令(例如,它是否支持ISO 7816-4结构中的命令).
建议区分它们的方法是什么?我应该从Mifare Plus命令集中尝试一些命令并检查我是否得到正确的回复?或者有更聪明的方法吗?
我用com.google.android.gms.vision.barcode.BarcodeDetector它来读取QR码.问题是这些代码携带原始二进制数据; 没有电话号码,没有URL,没有地理位置......我无法更改这些QR码,因为它们是在不同的应用程序中生成的.
当我使用Android Barcode API扫描这些QR码时,生成的Barcode对象不允许我访问原始数据,尽管它必须知道它!
我得到的只是"Unknown encoding"信息rawValue和displayValue属性.
拥有byte[]属性而不是两个String属性会更有意义,因为QR码可以携带一般数据.
我没有看到隐藏开发人员的原始数据字节数组的意义.我可以以某种方式扩展BarcodeDetector课程或Barcode课程以获得我需要的东西吗?
编辑:
这是一个绝对有效的QR码,虽然它带有1024字节的数据,但Vision API无法读取它:
QR码 - 原始二进制数据是相关的,但它不能解决我的问题.
我开发了一款自两年前就已与Google Pay应用程序一起广泛使用的应用程序,其HCE NFC功能在Android 9发行之前就没有问题。
但是,最近我收到了许多来自Android 9用户的投诉。有人说我的应用与Google Pay有冲突。安装我的应用程序后,Google Pay不起作用(当他们尝试关闭或阻止NFC进行付款时,没有任何反应)。当他们卸载我的应用程序时,Google Pay将再次开始工作。
<?xml version="1.0" encoding="utf-8"?>
<host-apdu-service xmlns:android="http://schemas.android.com/apk/res/android"
android:description="@string/servicedesc"
android:requireDeviceUnlock="false">
<aid-group android:description="@string/aiddescription">
<aid-filter android:name="F0707070707070617070"/>
</aid-group>
</host-apdu-service>
Run Code Online (Sandbox Code Playgroud)
注意:在上面的示例中,我使用了一些虚假的AID,但是我确信真实的AID与Google Pay的AID不冲突。
HCE NFC在Android 9中引入了哪些重大变化?如何修复我的应用程序?
我有NXP的智能卡支持ECC over GF(p)并且不支持ECC over GF(2 ^ n).
在我的项目中,我需要使用这种特殊类型的智能卡(已经使用了数千个实例).但是,我需要在sect193r1上添加EC签名验证,这是GF(2 ^ n)上的曲线.
对我来说,性能不是问题.这可能需要一些时间.签名验证不涉及任何私钥,因此安全性和密钥管理也不是问题.不幸的是,我必须验证智能卡内的签名,而不是配备智能卡读卡器的设备.
有什么解决方案吗?是否存在基于GF(2 ^ n)的EC加密的纯软件JavaCard实现的任何现有源代码?
我需要在JavaCard中尽可能快地实现16字节数组的左移位.
我试过这段代码:
private static final void rotateLeft(final byte[] output, final byte[] input) {
short carry = 0;
short i = (short) 16;
do {
--i;
carry = (short)((input[i] << 1) | carry);
output[i] = (byte)carry;
carry = (short)((carry >> 8) & 1);
} while (i > 0);
}
Run Code Online (Sandbox Code Playgroud)
任何想法如何提高性能?我正在考虑一些Util.getShort(...)和Util.setShort(...)魔法,但我没有设法让它比上面的实现更快.
这是CMAC子项计算的一部分,不幸的是,它经常完成.如果你知道一些更快的计算CMAC子项的方法(一个循环中的子键或类似的东西),请告诉我.
performance cryptography bit-manipulation bit-shift javacard
Java Card小程序中的一个典型错误是将持久性内存用于应该在RAM中的临时变量.
这些错误可能会减慢applet的速度并导致一些严重的问题(例如EEPROM损坏的症状).
单元测试很难揭示这些错误.单元测试将applet作为黑盒子访问,他们所能做的就是检查给定输入的输出.当然,它们可以测量时间并报告可疑的慢速命令,但是覆盖持久存储器中的单个字节几乎与覆盖RAM中的单个字节的时间相同.
有没有办法摆脱这些错误(编码时要小心)?我可以以某种方式检测EEPROM更改以及在处理特定APDU时完成了多少次更改?
当然,一个好的模拟器可以完成这项工作.但是,JCardSim(www.jcardsim.org)和恩智浦JCOP工具似乎都远远无法报告EEPROM使用情况统计数据.
你知道其他任何可以帮助我的工具或测试技术吗?
我需要使用C#客户端将一些数据传递到服务器上的PHP页面HttpWebRequest.根据文档的预期数据是一个数组数组,如下所示:
$postData = array(
'label1' => 'myLabel',
'label2' => array(
'label2_1' => 3
'label2_2' => array(
'label2_2_1' => 3
)
)
);
Run Code Online (Sandbox Code Playgroud)
上面的结构只是一个例子.它可能非常复杂,结构本身也不是一成不变的.
在PHP中有一个名为的函数http_build_query,它将这些PHP嵌套数组序列化为一个简单的字符串,该字符串可以作为HTTP POST请求的数据发送.问题是我需要从我的C#应用程序调用这个PHP页面.我想将这些嵌套数组表示为嵌套数据Dictionary<string, object>或匿名类型.
我怎样才能做到这一点?http_build_query生成输出字符串后会遵循什么规则?
有一个非常类似的问题将PHP数组转换为C#,遗憾的是这并没有解决我的问题.接受的答案建议采用固定结构的解决方案,第二种方法根本不起作用.
android ×4
javacard ×4
smartcard ×4
c# ×3
java ×3
cryptography ×2
.net ×1
apdu ×1
arrays ×1
barcode ×1
bit-shift ×1
debugging ×1
google-pay ×1
hce ×1
http ×1
nfc ×1
nullable ×1
performance ×1
php ×1
post ×1
qr-code ×1
security ×1
sim-card ×1
simulation ×1
syntax-error ×1
unit-testing ×1
xamarin ×1