さて、私は自分の問題への答えとしてインターネットを梳きましたが、私はそれがRの仕組みにちょっと邪魔になりません。if文が間違ったデータ型を格納するのはなぜですか?
以下は、システムクロックから公開鍵と秘密鍵を生成し、それを使用して暗号化されたメッセージの復号化を試みる関数のコードです。このビットは正常に動作しますが、明らかに異なるランダム世代を経るにつれ、多くのゴミとNULLデータが戻ってきます。
grepを使ってこれをフィルタリングし、そのgrepの結果が1であったかどうかをテストしたかったので、デコードされたメッセージをリストに入れました。
問題は、if文をどのように提案しても、ナンセンスエントリとNULLエントリの両方でリストが乱雑になります。 私はしようとしました!is.null、is.character。テスト== 1. etcなど何も動作するようです。リストがまったく取り込まれないか、またはifステートメントで実行されるすべてのエントリによってデータが取り込まれます。
アドバイスをいただければ幸いです。ありがとう:)
編集:さて、私は許してください、これらはコピー&ペーストの仕事は明快さを提供するためです。最初のコードは、私がメッセージを暗号化するために使用しているコードです。
require(gmp)
source("convert.R")
p <- nextprime(urand.bigz(size=51, seed=as.bigz(Sys.time())))
q <- nextprime(urand.bigz(size=50))
n <- p*q
finde <- function(phi) {
r <- floor(log(phi, base = 2))
y <- 0 # initialise
while(y != 1) {
e <- urand.bigz(nb = 1, size = r)
y <- gcd.bigz(e, phi)
}
return(e)
}
phi <- (p-1) * (q-1)
e <-finde(phi)
d <- inv.bigz(e, phi)
text1 <- c("I want to eat a baby panda with my bare teeth and hands. Just so I know there's something else in this world suffering more than myself, right now.")
m <- blocks(text1, n) # arguments are text1 (message) and n (public key)
u <- as.bigz((as.bigz(m, n)^e))
dput(u, file="codedmessage.R")
第二は、「convert.R」ソースファイルに含まれるコードです:
blocks <- function(txt, n) {
x <- strtoi(charToRaw(txt), 16L)
ll <- length(x)
bl <- floor(log(n, base=256)) # block length (how large the blocks must be)
nb <- floor(ll/bl)
wp <- bl*nb
rem <- ll - wp
s <- as.bigz(vector(mode="numeric", length=0))
u <- 0
while(u < wp) {
total <- as.bigz(0)
for(i in 1:bl) {
total <- 256 * total + x[i+u]
}
u <- u + bl
s <- c(s, total)
}
if(rem > 0) {
total <- as.bigz(0)
for(i in 1:rem) {
total <- 256 * total + x[i + wp]
}
s <- c(s, total)
}
return(s)
}
words <- function(blocknum) {
w <- vector(mode="numeric", length=0)
wl <- blocknum
while(as.bigz(wl) > 0) {
rem <- as.bigz(wl) %% 256
w <- c(rem, w)
wl <- (as.bigz(wl) - as.bigz(rem))/256
}
return(w)
}
dectext <- function(listnum) {
len <- length(listnum)
newls <- as.integer(vector(mode="numeric", length=0))
for(i in 1:len) {
temp <- as.integer(words(listnum[i]))
newls <- c(newls, temp)
}
return(rawToChar(as.raw(newls)))
}
そして最後に、最後のコードが解読され、私は問題を抱えているリスト機能をコンパイルします。
finde <- function(phi) {
r <- floor(log(phi, base = 2))
y <- 0 # initialise
while(y != 1) {
e <- urand.bigz(nb = 1, size = r)
y <- gcd.bigz(e, phi)
}
return(e)
}
FindKey <- function(a, y) {
x <<- 1 #initialisation
decodedlist <<- list() #initialisation
while (x<7200) {
print(x)
print(a)
p <- nextprime(urand.bigz(size=51, seed=as.bigz(a)))
q <- nextprime(urand.bigz(size=50))
n <- p*q
phi <- (p-1) * (q-1)
phi
e <-finde(phi)
d <- inv.bigz(e, phi)
recieved<-dget(file=y)
v<-as.bigz(as.bigz(recieved, n)^d)
tryCatch({
decodetext<-dectext(v)
Decrypt<- capture.output(cat(decodetext))
print(Decrypt)
test <- grep("and", Decrypt)
if (!is.null(Decrypt)){
if (is.character(Decrypt)){
decodedlist[[x]] <<- Decrypt
}else{return}}else{return}
}, warning = function(war) {
return()
}, error = function(err){
return()
}, finally = {
x=x+1
a=a-1})
}
}
申し訳ありませんが、それは長いです..しかし、私は本当に何をするか分からない:(
'nextprime'と' as.bigz'がベースR.どのパッケージ(複数可)にあるように表示されません。使っていますか?これは私の好奇心です。あなたの問題を解決するのにはあまり関係ありません。 – shea
再現可能な例を示してください。 –
おそらくDecrypt *に* being * nullのないnullが含まれていますか? – Acccumulation