Tag: 加密

用于Yubico OpenPGP智能卡的PGP数据加密

我试图在Java应用程序中基于Yubikey NEO OpenPGP智能卡小程序实现PGP加密。 这似乎是一个黑暗的艺术,并不容易谷歌这个东西,但这里是我到目前为止: 卡被初始化,密钥是使用gpg工具生成的。 它一般工作。 我有我的公钥以.asc格式,并设法加载到org.bouncycastle.openpgp 使用javax.smartcardio API连接到USB加密狗的智能卡。 选择OpenPGP小程序 val pgpAID = bytes(0xD2, 0x76, 0x00, 0x01, 0x24, 0x01) val answer = cardChannel.transmit(CommandAPDU(0x00, 0xA4, 0x04, 0x00, pgpAID)) 成功向卡提交正确的PIN码 val pin = “123456” return bytes(0x00, 0x20, 0x00, 0x82, pin.length) + pin.toByteArray(Charsets.UTF_8) 发送准成功(见下文) decipher命令 bytes(0x00, 0x2a, 0x80, 0x86, data.size) + data + bytes(0x00) 当data = “xxxx”.toByteArray() ,结果是SW=9000 […]

与Android上的加密相比,解密要慢得多

我在Kotlin使用“CBC”模式和“PKCS5Padding”填充实现了“AES”加密和解密。 我注意到,虽然解密cipherInputStream.read(buffer)只读取512个字节,而不是8192字节的完整缓冲区大小。 这是为什么? 加密时使用整个缓冲区。 这些是我正在使用的常量, private val TRANSFORMATION = “AES/CBC/PKCS5Padding” private var SECRET_KEY_FAC_ALGORITHM = “PBKDF2WithHmacSHA1” private val SECRET_KEY_SPEC_ALGORITHM = “AES” private val cipher = Cipher.getInstance(TRANSFORMATION) private val random = SecureRandom() private val KEY_BITS_LENGTH = 256 private val IV_BYTES_LENGTH = cipher.blockSize private val SALT_BYTES_LENGTH = KEY_BITS_LENGTH / 8 private val ITERATIONS = 10000 解密代码 cis = […]